不小心将 oh-my-posh 从 V2 升级到了 V3,许多东西有了较大变化。此篇博客记录一下主题的修改记录。
封面《月に寄りそう乙女の作法》

前言

oh-my-posh 是一个可自定义的 shell 提示引擎。oh-my-posh v3 相较于 oh-my-posh v2,完全使用了 GO 编写,使其可以跨平台运行,同时对主题的修改更容易。

Oh-My-Posh V3 的文档在

安装

1
2
3
4
5
6
7
# -Scope CurrentUser可以不需要,因为默认就是CurrentUser
# 可能需要VPN下载
Install-Module oh-my-posh -Scope CurrentUser

# 从V2升级到V3
# 似乎有点点问题,我是卸载重装了
Update-Module -Name oh-my-posh -Scope CurrentUser

主题配置

展示所有本地主题

1
Get-PoshThemes

展示主题

设置主题

1
2
3
4
5
6
7
# 此处以本人比较喜欢的paradox为例
# 设置主题
Set-PoshPrompt -Theme paradox
# 导出当前主题以便修改
Export-PoshTheme -FilePath ~/.oh-my-posh.omp.json
# 设置自定义的主题
Set-PoshPrompt -Theme ~/.oh-my-posh.omp.json

需要注意的是现在设置的主题为暂时的,当你打开新的 powershell 以后就没了,因此还需要编辑 $PROFILE 来持久化

1
2
3
4
# 笔记本编辑
notepad $PROFILE
# 或者代码编辑器编辑
code $PROFILE

添加下面一行

1
Set-PoshPrompt -Theme  ~/.oh-my-posh.omp.json

如果遇到了数字签名问题,可以参考里面的 RemoteSigned 的方法,打开 profile 文件属性设置为不阻拦。

字体下载

oh-my-posh V3 设计使用 Nerd Fonts,官方推荐 Meslo LGM NF。本文配置使用的是 MesloLGM NF 字体。需要下载完字体后设置终端的字体,否则一些特殊符号无法正常显示

主题定制

考虑到自带的主题无法完美的符合我的要求,因此需要对主题文件进行修改,主要调整 conda 的全局显示、git 和时间的显示。也可以参考其他主题新增一点功能,所有官方主题文件在

conda

oh-my-posh 默认的 python 配置只有在含有 python 文件的目录下才会启动,因此无法看到 conda 的默认环境。修改起来也比较简单,采用环境变量的形式即可。通过 dir env: 找到 CONDA_DEFAULT_ENV 环境变量,设置 oh-my-posh 中的背景色为红色,设置 python 的图标,保持字体颜色一致。为了好看和方便,添加到 session 块之后 path 块之前。

1
2
3
4
5
6
7
8
9
10
11
{
"background": "#FF6E6E",
"foreground": "#100e23",
"powerline_symbol": "\uE0B0",
"properties": {
"prefix": "\uE235",
"var_name": "CONDA_DEFAULT_ENV"
},
"style": "powerline",
"type": "envvar"
}

git

oh-my-posh 在高版本中的 git 不显示详细信息,可以通过配置主题解决。配置如下,也可以使用 posh-git 直接配置。经过尝试 posh-git 无法达到我需要的效果。

1
2
3
4
5
6
7
8
9
10
11
12
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#193549",
"background": "#95ffa4",
"properties": {
"display_status": true,
"display_stash_count": true,
"display_upstream_icon": true
}
}

time

参考其他主题,在每行的右边新增一个显示当前时间的图标。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"alignment": "right",
"type": "prompt",
"segments": [
{
"type": "time",
"style": "plain",
"foreground": "#ffffff",
"properties": {
"time_format": "[15:04:05]"
}
}
]
}

完整配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"background": "#ffe9aa",
"foreground": "#100e23",
"powerline_symbol": "",
"style": "powerline",
"type": "root"
},
{
"background": "#ffffff",
"foreground": "#100e23",
"powerline_symbol": "",
"style": "powerline",
"type": "session",
"properties": {
"display_host": false
}
},
{
"background": "#FF6E6E",
"foreground": "#100e23",
"powerline_symbol": "",
"properties": {
"prefix": "  ",
"var_name": "CONDA_DEFAULT_ENV"
},
"style": "powerline",
"type": "envvar"
},
{
"background": "#91ddff",
"foreground": "#100e23",
"powerline_symbol": "",
"properties": {
"folder_icon": "",
"folder_separator_icon": "  ",
"style": "full"
},
"style": "powerline",
"type": "path"
},
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#193549",
"background": "#95ffa4",
"properties": {
"display_status": true,
"display_stash_count": true,
"display_upstream_icon": true
}
},
{
"background": "#ff8080",
"foreground": "#ffffff",
"powerline_symbol": "",
"properties": {
"prefix": " "
},
"style": "powerline",
"type": "exit"
}
],
"type": "prompt"
},
{
"alignment": "right",
"type": "prompt",
"segments": [
{
"type": "time",
"style": "plain",
"foreground": "#ffffff",
"properties": {
"time_format": "[15:04:05]"
}
}
]
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#007ACC",
"properties": {
"prefix": "",
"text": "❯"
},
"style": "plain",
"type": "text"
}
],
"type": "prompt"
}
],
"final_space": false
}

效果图

最终效果

后记

总体来说 oh-my-posh v3 比 v2 更具有移植性,同配置起来更方便,默认主题也多,相对也更好看。个人主观感觉启动速度也快了不少。

参考文献

oh-my-posh doc
数字签名