Matrix 精选
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对排版略作修改。
和终端打过交道的读者应该对每次输入命令前都会出现的提示符(Prompt)不陌生,它们可以承载诸如当前位置、用户名等有用的信息。不管是出于美观还是实用的目的,自定义提示符都能给终端那枯燥的黑白界面添一抹色彩。
本文的主角 Oh my posh 正是这样一款终端 Prompt 个性化工具,虽然肇始于同类工具 Oh My Zsh,但当更新到 5.0 版本时,重新设计的 Oh my posh 已经摆脱平台的桎梏,支持了 Windows、GNU/Linux(WSL)、macOS 三个系统上的 PowerShell、bash、zsh 等终端。
下文将展示 Oh my posh 的效果,然后介绍它在不同系统和终端上的安装配置方式。
效果
Oh my posh 预置了数十款主题,项目官网有这些主题的 预览。安装并配置好工具后,打开终端即可看到效果。其中既有以文字为主的简约主题,例如 wopian、material:
wopian
material
也有辅以彩色背景和字体的醒目主题,例如 jandedobbeleer 和 craver:
jandedobbeleer
craver
若不满意现有的主题,工具也支持加载自定义主题,其语法相较于 PowerShell 等终端默认提供的语法要简单不少。而除了能讨好用户的视觉,Oh my posh 的一些主题增加的 Git 项目状态预览等信息也比较实用。
安装
主题多姿多彩并没有让 Oh my posh 的安装变得复杂。它在各个平台上的安装方式流程是大致一致的,分为三步:按需安装字体 > 安装 Oh my posh > 修改终端配置文件。
如果之前以 Module 的方式安装过低版本 Oh my posh(键入Get-Module Oh*
判断),笔者建议用Uninstall-Module oh-my-posh
卸载模块,并按下面的方式重装。不采用升级的方式的理由会在后文提到。
按需安装字体
正如第一章中效果图展示的那样,部分 Oh my posh 主题有一些特殊的字符,例如表示系统类型的徽标、GitHub 标志,这些字符需要特殊的字体支持。如果读者看上了一款有这些字符的主题,必须提前下载安装合适的字体,并将它们设置为终端显示的字体。
这里推荐使用 Nerd Fonts 系列字体,它们在支持各种特殊字符的同时,设计也比较养眼。访问 Nerd Fonts 的 下载界面,从中任意选择一个心仪的字体包,下载压缩包后解压,再安装进系统即可。笔者使用的是 Agave Nerd Font,Oh my posh 官方推荐 Meslo LGM NF。
之后,在终端的设置界面中将显示字体设置为刚刚安装的 Nerd Fonts。以 Windows Terminal 为例,进入设置 > 配置文件 > 默认值 & 子配置文件 > 外观,设定字体为 Nerd Fonts。这一设置对 WSL 和远程主机都生效。
安装 Oh my posh
目前版本的 Oh my posh 为了适配多平台,推出了新的安装方式,即首先安装 Oh my posh 程序,再利用此程序处理主题文件,这也意味着管理和升级它变得更加简单。因而相比于作为模块安装,笔者更推荐这种安装方式。
安装 Oh my posh 和安装其他程序没有什么不同,为了之后升级更加方便,笔者建议首先考虑各个平台的软件包管理程序:
在 Windows 上任选其一,适用于 Windows 和 WSL:
Scoop:scoop install https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json
Chocolatey:cinst oh-my-posh -y
Winget:winget install JanDeDobbeleer.OhMyPosh
macOS 使用 Homebrew:brew tap jandedobbeleer/oh-my-posh && brew install oh-my-posh
GNU/Linux :
# 这是安装程序 sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh sudo chmod +x /usr/local/bin/oh-my-posh # 下载主题文件 mkdir ~/.poshthemes wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip unzip ~/.poshthemes/themes.zip -d ~/.poshthemes chmod u+rw ~/.poshthemes/*.json rm ~/.poshthemes/themes.zip
如果不使用包管理程序,读者需要自行下载必要文件:进入项目的 Release 界面,从最新的发布版本中下载适用于自己系统的文件以及包含主题的压缩包 themes.zip
,解压到合适的位置。
修改终端配置文件
确定 Oh my posh 已经安装成功后,读者可以提前到项目官网的 主题页面 预览内置主题的效果,记下需要使用的主题在本地的路径。以 wopian 主题为例,使用不同安装方式得到的主题路径参考下表:
安装方式 | 路径 |
Windows Scoop | ~\scoop\apps\oh-my-posh\currenthemes\wopian.omp.json |
Windows Choco/Winget | ~\AppData\Local\Programs\oh-my-poshhemes\wopian.omp.json |
macOS Brew | ~/.poshthemes/wopian.omp.json |
GNU/Linux 命令行 | ~/.poshthemes/wopian.omp.json |
自行下载 | Oh my Posh 和 Themes 需要填完整的自定义路径 |
万事俱备,下面我们需要修改终端的配置文件。不同的终端配置文件位置不同。如果你不知道自己使用的是什么终端,可以键入oh-my-posh --print-shell
获得答案。
三大系统上的 PowerShell 配置文件有内置的变量$Profile
。键入$Profile
终端会显示配置文件的路径。编辑此文件,若没有,则新建一个。新增如下代码,重启终端就能看到效果。
oh-my-posh --init --shell pwsh --config 主题路径 | Invoke-Expression
Bash 的配置文件一般是~/.bashrc
或者~/.profile
,同上文一样,编辑对应的文件,若没有,则新建一个,新增下面一行代码并重启终端1:
eval "$(oh-my-posh --init --shell bash --config 主题路径)"
Zsh 的配置文件为~/.zshrc
,需要新增的代码需要将bash
改为zsh
:
eval "$(oh-my-posh --init --shell zsh --config 主题路径)"
在 Windows 的 Linux 子系统中使用 Oh my posh 无需像一般 GNU/Linux 那样另外安装,可以采用 oh-my-posh-wsl
命令。需要注意,WSL 上同一文件的路径和 Windows 是不一样的,c:/
应该写成/mnt/c/
,例如,WSL 上的 Ubuntu .bashrc 文件应该添加:
eval "$(oh-my-posh-wsl --init --shell bash --config /mnt/c/users/用户名/AppData/Local/Programs/oh-my-posh/themes/wopian.omp.json)"
fish 和 nu 用户可以参阅 官方文档。
修改主题
从上一章的最后一节给出的代码可以看出,更改主题只需要提供主题路径。我们自己写的主题也可以使用 Oh my posh 加载。它使用的主题文件格式为 JSON,对预置主题不满意的用户可以参考 配置文档 修改或者重写主题。
具体语法本文不做展开,需要注意的是如果直接在预置主题基础上进行了修改,下一次程序更新会用官方的主题覆盖掉用户的修改文件。因此,保险的做法是将修改后的主题移动到系统的其他位置。