mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1644 字
5 分钟
Windows 下配置 Nushell、Oh My Posh 与命令补全
2026-07-15

本文记录一套可复用的 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 或命令提示符中执行:

Terminal window
winget install --id Microsoft.WindowsTerminal -e
winget install nushell
winget install --id JanDeDobbeleer.OhMyPosh -e --source winget
winget install --id rsteube.Carapace -e

Nushell 默认安装到当前用户范围,不需要管理员权限。如需安装到机器范围:

Terminal window
winget install nushell --scope machine

安装后重新打开终端,检查三个程序:

Terminal window
nu --version
oh-my-posh version
carapace --version

输入 nu 即可从 PowerShell、CMD 或其他终端进入 Nushell:

Terminal window
nu

Nushell 官方安装说明见 Installing Nu,Oh My Posh 的 Windows 安装说明见 Windows Installation

二、安装 Maple Mono Normal NF CN#

本文使用 Maple Mono Normal NF CN

  • Normal:较克制的字形预设,风格接近 JetBrains Mono
  • NF:包含 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 版本:

Terminal window
scoop bucket add nerd-fonts
scoop install Maple-Mono-NF-CN

这个包在 Windows Terminal 中通常使用字体名称:

Maple Mono NF CN

后文统一使用 Maple Mono Normal NF CN。如果通过 Scoop 安装标准版本,请 将配置中的字体名称替换为 Maple Mono NF CN

也可以在 settings.jsonprofiles.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,应将 defaultProfileprofiles.defaults 和 Nushell 对象合并到原配置,保留已有快捷键、配色和其他 Shell Profile。

%USERPROFILE% 在 Nushell 中显示为 ~。Windows Terminal 的 startingDirectory 配置说明见 General profile settings

四、认识 Nushell 配置文件#

进入 Nushell 后查看配置路径:

Terminal window
$nu.config-path
$nu.env-path
$nu.cache-dir

Windows 默认对应:

%APPDATA%\nushell\config.nu
%APPDATA%\nushell\env.nu
%LOCALAPPDATA%\nushell

首次使用时可以创建文件:

Terminal window
mkdir $nu.default-config-dir
touch $nu.env-path
touch $nu.config-path
  • env.nu:环境变量以及 PATH 等启动环境
  • config.nu:补全、按键、提示符和自定义命令
  • vendor/autoload:工具自动生成的启动脚本

五、配置 Carapace 命令补全#

Nushell 自带内部命令、路径和程序名补全;Carapace 进一步为外部 CLI 提供子命令、参数和说明文本。

env.nu 中加入:

Terminal window
$env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense'
$env.CARAPACE_MATCH = '1'
mkdir $nu.cache-dir
carapace _carapace nushell
| save --force $"($nu.cache-dir)/carapace.nu"

config.nu 中加入:

Terminal window
$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 后测试:

Terminal window
git ch<Tab>
docker compose <Tab>
gh repo <Tab>

正常情况下会显示候选项、参数说明和颜色。完整配置见 Carapace Nushell Setup

六、启用 Oh My Posh#

Oh My Posh 当前要求 Nushell 0.104.0 或更高版本。将初始化命令放在 config.nu 最后一行:

Terminal window
oh-my-posh init nu --config montys

montys 是内置主题名称,也可以换成 jandedobbeleer 等其他主题。 主题名称会在首次使用时下载并缓存。配置后退出并重新打开 Nushell:

Terminal window
exit

如果希望使用本地配置,先导出主题:

Terminal window
let theme = ($nu.default-config-dir | path join 'montys.omp.json')
oh-my-posh config export --config montys --output $theme

再把初始化命令改为:

Terminal window
oh-my-posh init nu --config (
$nu.default-config-dir | path join 'montys.omp.json'
)

本地文件不依赖启动时的网络和远程主题缓存,也便于修改和备份。主题参数支持 本地路径、主题名称或 URL,详见 Customize Oh My Posh

完整的 config.nu 可以写成:

Terminal window
$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 风格的 grepcatheadtailcutwcxargs。可以安装 Microsoft Coreutils:

Terminal window
winget install Microsoft.Coreutils

安装后重新打开终端,以下命令可以直接使用:

Terminal window
grep --version
cat README.md | grep install
head -n 20 README.md
find . -name '*.ts'

Nushell 内置命令的优先级高于同名外部程序。使用 ^ 可以明确调用 Coreutils:

Terminal window
^ls.exe -la
^find.exe . -name '*.ts'
^sort.exe names.txt

如果希望 GNU 命令默认覆盖 Nushell 内置命令,建议先保留结构化版本:

Terminal window
alias nu-ls = ls
alias nu-find = find
alias nu-sort = sort
alias ls = ^ls.exe
alias find = ^find.exe
alias sort = ^sort.exe

之后:

Terminal window
# GNU 文本输出
ls -la
# Nushell 结构化表格
nu-ls | where type == file | sort-by size

不建议不加区分地覆盖全部内置命令,否则会失去 Nushell 结构化管道的主要 优势。

八、常用操作#

Terminal window
# 结构化查看文件
ls | where type == file | sort-by size --reverse
# 查看进程
ps | where name =~ 'node'
# 读取并筛选 JSON
open package.json | get scripts
# 请求 JSON API
http get https://api.github.com/repos/nushell/nushell
| select full_name stargazers_count
# 临时调用 PowerShell 或 Bash 脚本
pwsh script.ps1
bash script.sh

常用按键:

  • Tab:补全命令、路径或参数
  • Ctrl+R:搜索历史
  • Ctrl+O:使用 $env.EDITOR 编辑当前命令
  • Ctrl+D:退出 Nushell

九、更新#

Nushell 用户范围安装受 Winget 更新行为影响,重新执行安装命令最稳妥:

Terminal window
winget install nushell
winget upgrade --id JanDeDobbeleer.OhMyPosh -e --source winget
winget upgrade --id rsteube.Carapace -e

Oh My Posh 更新后可以重新执行初始化,使自动加载脚本与新版本保持一致:

Terminal window
oh-my-posh init nu --config montys

十、常见问题#

图标显示为方框#

确认 Maple Mono NF CN 字体已安装,并检查 Windows Terminal 的 Nushell 配置是否真的使用了对应字体名称。Maple Mono Normal NF CNMaple Mono NF CN 是不同字体系列,名称写错时 Windows Terminal 会静默 回退到其他字体,图标或中文宽度仍可能异常。

CMD_DURATION_MSexpected int, got string#

这是旧版 Oh My Posh 初始化脚本与新版 Nushell 的类型兼容问题。升级 Oh My Posh 并重新生成初始化脚本:

Terminal window
winget upgrade --id JanDeDobbeleer.OhMyPosh -e --source winget
Terminal window
oh-my-posh init nu --config montys

随后关闭所有旧 Nushell 会话并重新打开。

每次命令后出现两次提示符或两次错误#

检查 config.nu 是否既手动 source 了一份 Oh My Posh 初始化脚本,又执行了 oh-my-posh init nu。保留一种初始化方式即可;官方当前方式会使用 vendor/autoload,通常不需要再手动加载另一份生成文件。

Carapace 没有补全#

检查缓存脚本是否存在:

Terminal window
$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 配置。

参考资料#

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Windows 下配置 Nushell、Oh My Posh 与命令补全
https://blog.sleep0.de/posts/windows-nushell-oh-my-posh/
作者
Sleep1223
发布于
2026-07-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录