Windows 终端 PowerShell 配置记录:posh-git + PSReadLine + oh-my-posh

Windows Terminal 下 PowerShell 的 profile 配置记录,包含 posh-git、PSReadLine 预测提示和 oh-my-posh zash 主题的安装与配置。

记录一下 Windows 终端 PowerShell 的配置,免得下次重装系统又从头翻文档。

配置文件位置

PowerShell 的 profile 文件可以通过以下命令查看和编辑:

# 查看当前 profile 路径
echo $PROFILE

# 用记事本打开编辑
notepad $PROFILE

默认路径一般是:Documents\PowerShell\Microsoft.PowerShell_profile.ps1

完整配置

目前使用的三件套:

  • posh-git —— 在终端里显示 git 分支状态
  • PSReadLine 预测提示 —— 根据历史记录做命令自动补全
  • oh-my-posh —— 美化的命令行提示符主题
Import-Module posh-git -ErrorAction SilentlyContinue

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView

oh-my-posh init pwsh --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/zash.omp.json | Invoke-Expression

逐行说明

Import-Module posh-git -ErrorAction SilentlyContinue

加载 posh-git 模块,在提示符中显示当前 git 仓库的分支名、是否有未提交的更改、是否有未跟踪的文件等状态。加上 -ErrorAction SilentlyContinue 是为了在模块未安装时不报错中断。

Set-PSReadLineOption -PredictionSource History

启用基于历史记录的预测提示。你在终端里打字的时候,PowerShell 会根据以前输入过的命令给出补全建议,按箭头右键就能直接补全,不用重复敲长命令。

Set-PSReadLineOption -PredictionViewStyle ListView

把预测提示的显示方式改成列表视图。默认是内联模式(InlineView),建议显示在命令行后面。ListView 会在下方弹出一个可选列表,多条建议一目了然,选起来按箭头上下键更顺手。

oh-my-posh init pwsh --config ... | Invoke-Expression

初始化 oh-my-posh 并使用 zash 主题。这个主题简洁清晰,左边显示当前目录和 git 状态,右边显示执行时间和上一命令的退出码。配置源是直接从 GitHub 拉取的 JSON 主题文件,好处是换机器不用拷文件,一行命令即可。

安装这些组件

如果新机器从头配置,先装这三样:

# 1. 安装 posh-git
Install-Module posh-git -Scope CurrentUser -Force

# 2. 安装 oh-my-posh(winget 或直接下载)
winget install JanDeDobbeleer.OhMyPosh -s winget

# 3. 安装终端专属字体(否则图标显示为方框)
# 推荐:Meslo LGM NF
oh-my-posh font install meslo
# 然后在 Windows Terminal 设置中把字体改为 "MesloLGM NF"

字体这一步容易被忽略。oh-my-posh 的提示符里用了大量 Nerd Font 图标,如果终端字体不支持,看到的全是乱码方块。装了对应字体之后马上变正常。

踩过的坑

  • 执行策略:PowerShell 默认禁止运行脚本。第一次配 profile 可能遇到这个错误,执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 即可。
  • oh-my-posh 版本:旧版(2.x)的配置语法跟新版(3.x 以后)完全不同。如果网上搜到的配置不管用,先确认版本:oh-my-posh --version。当前用的是新版,配置文件用 JSON 格式,初始化命令是 oh-my-posh init pwsh
  • 启动慢:如果装了太多模块感觉 PowerShell 启动慢,可以把不常用的模块改成按需加载,或者把 $PROFILE 里的内容精简到最少。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注