关键词: nerd-font; oh-my-posh; posh; powerline-font; powershell; scoop; winget

最终效果预览

说明事项

本文与网络上多数介绍 oh-my-posh 的文章的不同之处:

  1. 其他博客提到的安装命令已过时, 会被引导到 “官方迁移页面” (如下图). 本文是根据 oh-my-posh 官网给出的最新安装方式来安装. (截至 2022 年 5 月)

  1. 对所有命令都添加了注释, 帮助大家来理解.
  2. 增加了主题, 字体的安装和说明事项.
  3. 尽可能多地提供配图.

安装

安装 oh-my-posh

  1. 以管理员身份运行 powershell

  2. 输入以下命令

    # 安装
    winget install oh-my-posh
    
    # 此外, 如果要检查升级, 则使用下面命令
    winget upgrade oh-my-posh
    

    上述命令将安装以下内容:

    1. oh-my-posh.exe
    2. themes: 最新的 oh-my-posh 主题集. 在线查看: https://ohmyposh.dev/docs/themes
      1. 在你的用户环境变量中会新增一个 “POSH_THEMES_PATH”:

  1. 重启 powershell 即可生效

安装更多插件 (可选)

见本文 扩展 部分.

选择主题

预览主题

方式 1: 官方在线预览: https://ohmyposh.dev/docs/themes

方式 2: 在 powershell 中输入 Get-PoshThemes 命令.

方式 3: 本地已安装的 oh-my-posh 主题, 可以在这个路径找到:

C:\Users\<UserName>\AppData\Local\Programs\oh-my-posh\themes

(ps: 这个路径就是环境变量 - “POSH_THEMES_PATH” 的值.)

可以看到主题多达将近 100 个.

怎么应用主题

假设要应用 “M365Pricess” 主题:

在主题文件夹 (C:\Users\<UserName>\AppData\Local\Programs\oh-my-posh\themes) 下可以找到它的完整文件名:

如果只在当前 powershell 进程中应用, 则输入下面的命令回车立即生效:

oh-my-posh init pwsh --config $env:POSH_THEMES_PATH\M365Princess.omp.json | Invoke-Expression

# 此外, 要想切换到其他主题, 只需更改文件名即可:
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH\bubbles.omp.json | Invoke-Expression

如果要在全局生效, 那么我们需要在 $PROFILE 文件中写入该值:

  1. $PROFILE 文件的路径为 C:\Users\<UserName>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 (如果文件不存在, 则自己创建一个)
  2. 用记事本打开
  3. 往里面添加一行刚才的命令

  1. 重启 powershell, 即可看到效果

此外, 上面的 4 个步骤, 也可以通过命令行来全部完成. 这也是很多网上的博客中给出的命令:

# 检查 $PROFILE 文件是否存在, 如果不存在则新建空文件
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }

# 用记事本打开
notepad $PROFILE

扩展

安装推荐字体

由于 oh-my-posh 主题包含了一些特殊字符, 有些字体会产生乱码.

使用下面推荐的字体不会出现乱码 (按推荐度排序):

  1. nerd font: https://www.nerdfonts.com/
  2. 等距更纱黑体
  3. powerline: https://github.com/powerline/fonts

注:

  • 不知道为什么, 我自己测试了等距更纱黑体和 fira mono for powerline 字体仍然会出现乱码. 使用 nerd 字体没有此问题.

  • nerd 有多种字族供选择. 在这个网站可以预览所有字体: https://www.programmingfonts.org/#font3270

    ps: 笔者个人比较喜欢 fira-mono 和 jetbrains-mono.

此外, 考虑到笔者经常使用 python rich 库, fira-mono 的边框字符的效果不是很好, jetbrains-mono 则非常完美.

安装更多插件

TODO

其他说明

我安装了旧的 oh-my-posh, 在 powershell 启动时会出现相关报错

报错截图:

解决方法:

根据截图中的 迁移建议 来操作, 即可卸载旧的 oh-my-posh 模块.

本文对官方的迁移建议进行了适当翻译. 如下步骤:

  1. 以管理员身份运行 powershell

  2. 移除相关的环境变量及其缓存

    Remove-Item $env:POSH_PATH -Force -Recurse
    

    这是一个可选的操作. 如果你的环境变量中没有 POSH_PATH, 上述命令没有效果, 但也不会有副作用.

  3. 卸载旧版 powershell 模块

    这里解释一下, oh-my-posh 的作者以前是维护两个源, 一个是最新的 winget 获取方法 (也就是正文介绍的安装方法), 另一个是 powershell module (也就是很多旧博客提供的 Install-Module 命令, 很显然, 现在 (2022年) 已经彻底不支持了, 只会导致报错.)

    所以我们要做的是卸载掉引起报错的 powershell module:

    Uninstall-Module oh-my-posh -AllVersions
    
  4. $PROFILE 文件中也移除它的导入

    # 用记事本打开 `$PROFILE` 文件
    notepad $PROFILE
    

    找到 “Import-Module oh-my-posh” 这一行, 把它删掉后保存.

升级 PowerShell 到 7.x

参考: https://aka.ms/PSWindows

这里 下载最新的 msi 安装包.

msi 文件可以双击来安装.

参考

按推荐的阅读优先级排列.

  • https://ohmyposh.dev/docs/installation/windows
  • https://ohmyposh.dev/docs/installation/customize
  • https://sspai.com/post/52907
  • https://vector.today/posts/a1abbbfe/
  • https://sspai.com/post/63233
  • https://ohmyposh.dev/docs/migrating
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐