本文记录一套可复用的 Windows 命令行环境:使用 Nushell 提供结构化 管道和跨平台语法,使用 Oh My Posh 渲染提示符,再由 Carapace 补充 Git、Docker、GitHub CLI 等外部命令的参数补全。
本文按 2026 年 7 月 15 日的官方文档整理。配置使用通用路径,不包含 个人项目命令、部署脚本或机器专属目录。
最终组成如下:
- Windows Terminal:终端模拟器
- Nushell:Shell 与结构化数据管道
- Oh My Posh:提示符主题
- Maple Mono Normal NF CN:中文、日文与 Nerd Font 图标字体
- Carapace:外部 CLI 参数补全
一、安装组件
在 PowerShell 或命令提示符中执行:
winget install --id Microsoft.WindowsTerminal -ewinget install nushellwinget install --id JanDeDobbeleer.OhMyPosh -e --source wingetwinget install --id rsteube.Carapace -eNushell 默认安装到当前用户范围,不需要管理员权限。如需安装到机器范围:
winget install nushell --scope machine已经安装 Scoop 时:
scoop bucket add extrasscoop install nu oh-my-posh extras/carapace-bin安装后重新打开终端,检查三个程序:
nu --versionoh-my-posh versioncarapace --version输入 nu 即可从 PowerShell、CMD 或其他终端进入 Nushell:
nuNushell 官方安装说明见 Installing Nu,Oh My Posh 的 Windows 安装说明见 Windows Installation。
二、安装 Maple Mono Normal NF CN
本文使用 Maple Mono Normal NF CN:
Normal:较克制的字形预设,风格接近 JetBrains MonoNF:包含 Oh My Posh 所需的 Nerd Font 图标CN:包含中文和日文字形
从 Maple Mono 官方 Release 下载 MapleMonoNormal-NF-CN.zip, 解压后选择其中的 TTF 文件,右键安装。建议至少安装 Regular、Bold、Italic 和 BoldItalic 四种字重。
安装完成后,在 Windows 字体设置中应能看到:
Maple Mono Normal NF CN如果不要求 Normal 预设,也可以直接通过 Scoop 安装标准 NF-CN 版本:
scoop bucket add nerd-fontsscoop install Maple-Mono-NF-CN这个包在 Windows Terminal 中通常使用字体名称:
Maple Mono NF CN后文统一使用 Maple Mono Normal NF CN。如果通过 Scoop 安装标准版本,请
将配置中的字体名称替换为 Maple Mono NF CN。
也可以在 settings.json 的 profiles.defaults 中让全部终端配置使用
Maple Mono:
{ "profiles": { "defaults": { "font": { "face": "Maple Mono Normal NF CN", "size": 12 } } }}字体版本与字形说明见 Maple Mono 官方仓库。
三、在 Windows Terminal 中添加 Nushell
Windows Terminal 通常不会自动生成 Nushell 配置,可以在设置界面中新建 配置,并填写:
名称:Nushell命令行:nu.exe起始目录:%USERPROFILE%字体:Maple Mono Normal NF CN也可以将下面的对象加入 profiles.list:
{ "guid": "{dfc9f507-f9d8-40be-82cf-5ece31cc62f2}", "name": "Nushell", "commandline": "nu.exe", "startingDirectory": "%USERPROFILE%", "hidden": false, "font": { "face": "Maple Mono Normal NF CN", "size": 12 }}下面是一份可以合并到 Windows Terminal settings.json 的完整示例。将
defaultProfile 指向相同 GUID 后,Windows Terminal 会默认启动 Nushell:
{ "$schema": "https://aka.ms/terminal-profiles-schema", "defaultProfile": "{dfc9f507-f9d8-40be-82cf-5ece31cc62f2}", "profiles": { "defaults": { "font": { "face": "Maple Mono Normal NF CN", "size": 12 } }, "list": [ { "guid": "{dfc9f507-f9d8-40be-82cf-5ece31cc62f2}", "name": "Nushell", "commandline": "nu.exe", "startingDirectory": "%USERPROFILE%", "hidden": false } ] }}不要用整段内容覆盖已有 settings.json,应将 defaultProfile、
profiles.defaults 和 Nushell 对象合并到原配置,保留已有快捷键、配色和其他
Shell Profile。
%USERPROFILE% 在 Nushell 中显示为 ~。Windows Terminal 的
startingDirectory 配置说明见
General profile settings。
四、认识 Nushell 配置文件
进入 Nushell 后查看配置路径:
$nu.config-path$nu.env-path$nu.cache-dirWindows 默认对应:
%APPDATA%\nushell\config.nu%APPDATA%\nushell\env.nu%LOCALAPPDATA%\nushell首次使用时可以创建文件:
mkdir $nu.default-config-dirtouch $nu.env-pathtouch $nu.config-pathenv.nu:环境变量以及 PATH 等启动环境config.nu:补全、按键、提示符和自定义命令vendor/autoload:工具自动生成的启动脚本
五、配置 Carapace 命令补全
Nushell 自带内部命令、路径和程序名补全;Carapace 进一步为外部 CLI 提供子命令、参数和说明文本。
在 env.nu 中加入:
$env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense'$env.CARAPACE_MATCH = '1'
mkdir $nu.cache-dircarapace _carapace nushell| save --force $"($nu.cache-dir)/carapace.nu"在 config.nu 中加入:
$env.config.show_banner = false$env.config.edit_mode = 'emacs'$env.config.completions.case_sensitive = false$env.config.completions.quick = true$env.config.completions.partial = true$env.config.completions.algorithm = 'prefix'
source $"($nu.cache-dir)/carapace.nu"重新打开 Nushell 后测试:
git ch<Tab>docker compose <Tab>gh repo <Tab>正常情况下会显示候选项、参数说明和颜色。完整配置见 Carapace Nushell Setup。
六、启用 Oh My Posh
Oh My Posh 当前要求 Nushell 0.104.0 或更高版本。将初始化命令放在
config.nu 最后一行:
oh-my-posh init nu --config montysmontys 是内置主题名称,也可以换成 jandedobbeleer 等其他主题。
主题名称会在首次使用时下载并缓存。配置后退出并重新打开 Nushell:
exit如果希望使用本地配置,先导出主题:
let theme = ($nu.default-config-dir | path join 'montys.omp.json')oh-my-posh config export --config montys --output $theme再把初始化命令改为:
oh-my-posh init nu --config ( $nu.default-config-dir | path join 'montys.omp.json')本地文件不依赖启动时的网络和远程主题缓存,也便于修改和备份。主题参数支持 本地路径、主题名称或 URL,详见 Customize Oh My Posh。
完整的 config.nu 可以写成:
$env.config.show_banner = false$env.config.edit_mode = 'emacs'$env.config.completions.case_sensitive = false$env.config.completions.quick = true$env.config.completions.partial = true$env.config.completions.algorithm = 'prefix'
source $"($nu.cache-dir)/carapace.nu"
oh-my-posh init nu --config montys七、可选:安装 Microsoft Coreutils
Windows 原生 Nushell 没有默认提供 GNU 风格的 grep、cat、head、
tail、cut、wc 和 xargs。可以安装 Microsoft Coreutils:
winget install Microsoft.Coreutils安装后重新打开终端,以下命令可以直接使用:
grep --versioncat README.md | grep installhead -n 20 README.mdfind . -name '*.ts'Nushell 内置命令的优先级高于同名外部程序。使用 ^ 可以明确调用
Coreutils:
^ls.exe -la^find.exe . -name '*.ts'^sort.exe names.txt如果希望 GNU 命令默认覆盖 Nushell 内置命令,建议先保留结构化版本:
alias nu-ls = lsalias nu-find = findalias nu-sort = sort
alias ls = ^ls.exealias find = ^find.exealias sort = ^sort.exe之后:
# GNU 文本输出ls -la
# Nushell 结构化表格nu-ls | where type == file | sort-by size不建议不加区分地覆盖全部内置命令,否则会失去 Nushell 结构化管道的主要 优势。
八、常用操作
# 结构化查看文件ls | where type == file | sort-by size --reverse
# 查看进程ps | where name =~ 'node'
# 读取并筛选 JSONopen package.json | get scripts
# 请求 JSON APIhttp get https://api.github.com/repos/nushell/nushell| select full_name stargazers_count
# 临时调用 PowerShell 或 Bash 脚本pwsh script.ps1bash script.sh常用按键:
Tab:补全命令、路径或参数Ctrl+R:搜索历史Ctrl+O:使用$env.EDITOR编辑当前命令Ctrl+D:退出 Nushell
九、更新
Nushell 用户范围安装受 Winget 更新行为影响,重新执行安装命令最稳妥:
winget install nushellwinget upgrade --id JanDeDobbeleer.OhMyPosh -e --source wingetwinget upgrade --id rsteube.Carapace -escoop update nu oh-my-posh carapace-binOh My Posh 更新后可以重新执行初始化,使自动加载脚本与新版本保持一致:
oh-my-posh init nu --config montys十、常见问题
图标显示为方框
确认 Maple Mono NF CN 字体已安装,并检查 Windows Terminal 的 Nushell
配置是否真的使用了对应字体名称。Maple Mono Normal NF CN 与
Maple Mono NF CN 是不同字体系列,名称写错时 Windows Terminal 会静默
回退到其他字体,图标或中文宽度仍可能异常。
CMD_DURATION_MS 报 expected int, got string
这是旧版 Oh My Posh 初始化脚本与新版 Nushell 的类型兼容问题。升级 Oh My Posh 并重新生成初始化脚本:
winget upgrade --id JanDeDobbeleer.OhMyPosh -e --source wingetoh-my-posh init nu --config montys随后关闭所有旧 Nushell 会话并重新打开。
每次命令后出现两次提示符或两次错误
检查 config.nu 是否既手动 source 了一份 Oh My Posh 初始化脚本,又执行了
oh-my-posh init nu。保留一种初始化方式即可;官方当前方式会使用
vendor/autoload,通常不需要再手动加载另一份生成文件。
Carapace 没有补全
检查缓存脚本是否存在:
$nu.cache-dir | path join 'carapace.nu' | path exists如果返回 false,重新执行生成命令,并确认 config.nu 中的 source 路径
一致。
Codex Desktop 中找不到 Nushell
Codex Desktop 的 Windows 集成终端目前只提供预设 Shell,不能直接添加任意
nu.exe 配置。可以把内置终端设为 Command Prompt 后输入 nu,或者直接
使用 Windows Terminal 的 Nushell 配置。
参考资料
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





