windows中使用Oh My Posh美化你的终端PowerShell或CMD

前言

Oh My Posh是一款终端个性化工具,支持 Windows、Linux(WSL)、macOS 系统上的 PowerShell、bash、zsh 等终端,可以配置不同主题达到个性化的效果。

今天上班忘记拿吃饭的家伙了 => 电脑,回家拿已来不及。还好公司有备用电脑,但是看惯了 Mac 的终端, Windows 系统的终端实在是太丑了,于是想到了终端个性化工具:oh-my-posh,折腾一番有了本文。

最终效果图如下

安装 Windows Terminal

win11 自带了 Windows Terminal 不用自己再装,如果你的系统没有 Windows Terminal ,需要先去 Microsoft Store 中下载:

安装 oh-my-posh

oh-my-posh 应该是对标 oh-my-zsh 的工具,其安装步骤如下:

  1. 使用系统管理员打开 Windows Terminal
  2. 执行安装命令: winget install JanDeDobbeleer.OhMyPosh -s winget
  3. 使用系统管理员重新打开 Windows Terminal,使得 oh-my-posh 命令生效
  4. 安装必要字体(否则某些 icron 会乱码),执行命令 oh-my-posh font install,此时会出现字体的候选列表,官方推荐安装 Meslo :

配置 oh-my-posh

安装完成后,现在即使打开 Windows Terminal 是没有任何效果的,需要再做一下配置。

配置运行 Windows Terminal 时自动加载 oh-my-posh:

执行命令 echo $PROFILE 查看 powershell 的配置文件路径,第一次配置肯定时不存在的,需要手动创建这个文件

  • 在目录 C:\Users\用户名\Documents\WindowsPowerShell
  • 新建 Microsoft.PowerShell_profile.ps1 文件 内容如下
代码语言:javascript
复制
C:\\Users\\用户名\\AppData\\Local\\Programs\\oh-my-posh\\bin\\oh-my-posh.exe init pwsh --config $env:POSH_THEMES_PATH\montys.omp.json | Invoke-Expression

Import-Module posh-git # 引入 posh-git
Import-Module PSReadLine # 历史命令联想

设置预测文本来源为历史记录

Set-PSReadLineOption -PredictionSource History

设置 Tab 为菜单补全和 Intellisense

Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

每次回溯输入历史,光标定位于输入内容末尾

Set-PSReadLineOption -HistorySearchCursorMovesToEnd

设置向上键为后向搜索历史记录

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

设置向下键为前向搜索历史纪录

Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

  • 注意 用户名 请替换为你的用户名
  • 之后可以使用 notepad PROFILE</code> 快速打开配置文件</li></ul><p>修改这个文件内容:</p><ul class="ul-level-0"><li>在其中添加一行: <code>oh-my-posh init pwsh --config env:POSH_THEMES_PATH\montys.omp.json | Invoke-Expression
  • 这行代码的意思是: 使用 montys.omp.json 配置文件初始化 oh-my-posh
  • 其中的 montys.omp.json 就是 oh-my-posh 的主题样式,可以到官方的主题列表选择自己喜欢的主题替换上去

这个时候重新启动 Windows Terminal,就会自动加载这个配置文件,进入 oh-my-posh 终端

这里注意,有可能你重新打开 Windows Terminal 时,会报错: 无法加载文件 .....\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚本

这里的 Microsoft.PowerShell_profile.ps1 就是你刚刚修改的配置文件,其实它是以 ps1 形式存在的一个 powershell 脚本。

这个报错是因为你的 PowerShell 限制了执行策略,不允许随便执行第三方脚本。

解决方法也很简单,只需要以管理员权限打开 Powershell:

  1. 执行 Set-ExecutionPolicy RemoteSigned 修改策略
  2. 执行 Get-ExecutionPolicy 确认策略是否已修改

此时再重新打开 Windows Terminal 就可以成功进入 oh-my-posh 了

配置字体

此时 oh-my-posh 一般是乱码的,原因是未设置字体。

  1. 在 Windows Terminal 顶部最右边,依次点击 ->> 设置 ->> Windows Powershell ->> 外观
  2. 在【字体】中选择刚刚安装的 Meslo: MesloLGM Nerd Font

重新打开 Windows Terminal,至此 oh-my-posh 已配置完成。

更换主题

如果你需要更换其它主题,可以去网站浏览也可以使用命令查看(初始化之后才能使用下面的命令):

代码语言:javascript
复制
Get-PoshThemes

在网站上浏览:https://ohmyposh.dev/docs/themes

这些主题通常都已经默认下载了,位于:

代码语言:javascript
复制
C:\Users\用户名\AppData\Local\Programs\oh-my-posh\themes

你只需要启用它们即可,编辑 PowerShell 的配置文件并修改 oh-my-posh 的 init 那一行即可:

代码语言:javascript
复制
 notepad PROFILE</code></pre></div></div><p>将<code>jandedobbeleer</code>换成你喜欢的主题名称即可:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">oh-my-posh init pwsh --config &#34;env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression

安装Git扩展

posh-git 是一款专为 Windows 系统的 PowerShell 设计的 Git 扩展模块。它的主要目标是在 PowerShell 中提供更为友好、直观的 Git 命令行界面,通过整合 Git 相关的信息到命令提示符中,并提供方便快捷的键绑定,使得日常 Git 操作更为高效、直观。

安装

代码语言:javascript
复制
Install-Module -Name posh-git -Scope CurrentUser

安装完成后,重启 PowerShell 并输入以下命令启用 posh-git:Import-Module posh-git

不生效的话可以在前面的配置文件 Microsoft.PowerShell_profile.ps1中追加以下内容

代码语言:javascript
复制
Import-Module posh-git # 引入 posh-git

历史命令联想

oh-my-zsh 有一个很便利的功能就是输入部分命令后、按 就可以联想历史的完整命令,其实在 oh-my-posh 中也能实现。

首先在 PowerShell 执行以下命令安装插件:

代码语言:javascript
复制
Install-Module -Name PowerShellGet -Force
Install-Module PSReadLine -AllowPrerelease -Force

然后修改前面的配置文件 Microsoft.PowerShell_profile.ps1,在末尾追加以下内容:

代码语言:javascript
复制
Import-Module PSReadLine # 历史命令联想

设置预测文本来源为历史记录

Set-PSReadLineOption -PredictionSource History

设置 Tab 为菜单补全和 Intellisense

Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

每次回溯输入历史,光标定位于输入内容末尾

Set-PSReadLineOption -HistorySearchCursorMovesToEnd

设置向上键为后向搜索历史记录

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

设置向下键为前向搜索历史纪录

Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

卸载

代码语言:javascript
复制
Uninstall-Module oh-my-posh -AllVersions

配置cmd终端使用oh-my-posh

首先,安装clink工具,双击exe安装包即可安装

PS: 请记住 clink 的安装目录,下一步会用到~

然后,进入 clink 安装目录,创建 oh-my-posh.lua 文件,添加如下内容:

代码语言:javascript
复制
load(io.popen('oh-my-posh init cmd'):read("*a"))()

或者用你自己设置的主题不用默认的

代码语言:javascript
复制
load(io.popen('oh-my-posh init cmd --config C:\Users\用户名替换\AppData\Local\Programs\oh-my-posh\themes\montys.omp.json'):read("*a"))()

配置VSCode终端使用oh-my-posh

在 VScode 里使用终端,可能会出现乱码或者图标不显示情况,也是设置一下字体就行。

直接输入你上面配置的 oh-my-posh 字体 如: MesloLGM Nerd Font

使用体验

  • 优点
    • oh-my-posh 总体还不错,能够方便的展示 git 相关的信息
  • 缺点
    • 性能拉跨,每次终端可能需要0.5s到2s之间的延迟卡顿,相比于 linux 上的 shell 要慢不少

有就行了,要啥自行车~