PowerShell美化oh-my-posh主题及特殊字符替换
起始篇:
日常在使用VSC时,终端使用是的Windows系统自带PowerShell,每次打开时都会提示
尝试新的跨平台 PowerShell https://aka.ms/pscore6
行吧,那就试试,于是安装了 PowerShell 7.2.1 win-64
与系统自带的 Windows PoweShell 是共存的
命令行继承了一贯的传统,既然每天都都对着一成不变的界面,那就美化一下
美化篇:oh-my-posh
安装过程:
以管理员身份打开PowerShell,依次执行下面三条命令,若遇到Yes,NO询问的地方都Y
Set-ExecutionPolicy Bypass
Install-Module oh-my-posh -Scope CurrentUser
Install-Module posh-git -Scope CurrentUser
配置过程:
新安装的PowerShell是没有配置文件的,创建命令(当然不用命令,也可直接新建一个文件“Microsoft.PowerShell_profile.ps1”)
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
执行命令后创建的配置文件的存放位置
Windows PowerShell 的存放位置:
文档\PowerShell\Microsoft.PowerShell_profile.ps1
PowerShell 7.2.1 的存放位置:
文档\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
使用记事本编辑
notepad $PROFILE
将下面脚本复制到里,保存
Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt -Theme agnoster
一二条脚本导入模块,与Python有点相似,第三条为设置主题,其中agnoster为主题名,可自行修改为自己喜欢的主题
再次使用管理员身份打开PowerShell,开始导入模块,下载主题,需要等几分钟,完毕后,就可以看到不一样的命令提示符
查看已有的主题,使用命令
get-poshthemes
自定义主题修改篇:
参考官方文档
Introduction | Oh My Posh
找到Oh-my-posh主题存放的位置
Windows PowerShell 的存放位置:
文档\WindowsPowerShell\Modules\oh-my-posh\themes
PowerShell 7.2.1 的存放位置:
文档\PowerShell\Modules\oh-my-posh\themes
自己新建一个或复制一个进行修改,注意文件名结构,参考:agnoster.omp.json
个人认为比较有特点的是:Java、Python、Git目录的识别标志,命令执行时间 executiontime
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"background": "#25AFF3",
"foreground": "#ffffff",
"properties": {
"fetch_status": true,
"template": "{{ .HEAD }}{{ if .Staging.Changed }} \uF046 {{ .Staging.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Working.Changed }} \uF044 {{ .Working.String }}{{ end }}",
"postfix": ") ",
"prefix": " branch ("
}
},
{
"type": "python",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#FF6471",
"properties": {
"prefix": " \uE235 ",
"display_mode": " files "
}
},
{
"type": "java",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#4063D8",
"properties": {
"prefix": " \uE738 ",
"display_mode": " files "
}
},
{
"type": "executiontime",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"background": "lightYellow",
"foreground": "#3f3f3f",
"properties": {
"threshold": 0,
"style": "roundrock",
"prefix": " \ufbab"
}
},
比较特殊的是 exit ,需要配合使用,当命令错误时触发
{
"type": "exit",
"style": "plain",
"foreground": "#e0f8ff",
"properties": {
"prefix": "\ue285ff",
"display_exit_code": false,
"always_enabled": true,
"error_color": "#ef5350"
}
},
乱字符处理篇:
刚配置好的Oh-my-posh主题,绝大多数主题都会出现乱码,这是因为主题里用了很多特殊的字符(符号),官方文档已经说的很明确了,主题是居于Nerd Fonts 字体设计的。
Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher
安装官方建议的字体后,乱码问题就解了
VSC仍然乱码,则需要设置一下VSC里终端的字体
最终效果
字体Patch篇
试了Nerd Fonts 的全部字体,中文显示都不太理想
Nerd Fonts 官方还有另一种解决方案,一个可以Patch字体的脚本,自定义属于自己的字体
https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/font-patcher
font-patcher脚本折腾了三天都没搞定,可以直接跳过本篇,功力足够的网友可以偿试一下
下面仅是本人折腾的过程:
下载字体库:
git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git
未下载成功,后换成gitee
git clone https://gitee.com/keyboardkiller/nerd-fonts.git
下载到 1.02GB 的项目文件
font-patcher 脚本参数说明
font-patcher 字体文件 -s -c -out 输出文件夹
-s 设置图标宽度为single, 默认为double, 在某些场景下可能会造成图标重叠
-c 设置添加全部图标集
-out 设置输出文件夹, 默认为当前文件夹
在Windows下运行出错,安装Python模块
pip install python-fontforge #出错
pip install python3-fontforge #成功
报错
FontForge module is probably not installed. [See: http://designwithfontforge.com/en-US/Installing_Fontforge.html]
安装windows版FontForge后,仍然出错
官方文档相对详细的是Unix系统下的操作,那就安装了Ubuntu
接着继续操作
sudo apt-get install python-fontforge #出错
sudo apt-get install python3-fontforge #成功
sudo apt-get install python-configparser
chmod +x font-patcher #提示没有执行权,此命令给文件添加权限
报错,/usr/bin/env: "python\r":没有那个文件或目录
查阅资料后发现:从github中clone下来的文件,可能创建在windows下,多了\r字符。
解决方法如下:
使用VI编辑器打开文本,然后进行如下操作:
:set ff #然后回车,我这个文件显示为dos格式。
:set ff=unix #回车,设置为unix格式。
:wq
一顿操作后,仍然报错,查看了环境,Ubuntu 默认装了三个版本的 Python
Patch字体不成功,从网上找到这个软件最终实现了增加字符的功能,操作极其简单
准备
先从Nerd Fonts 官方下载一套字体,作为特殊字符提取源,建议下载 Meslo Nerd Font
Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher
本人日常使用的是更纱黑体,(至于大家想替换的目标字体,自行准备,前提是PowerShell能识别得出来)
下载地址:
GitHub - Moyf/Sarasa-Gothic: Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック / 사라사 고딕
用TypeTool3同时打开两个字体
一个是含特殊字符的 Meslo Nerd Font 字体文件 Meslo LG S Regular Nerd Font Complete Windows Compatible.ttf
另一个是不含的特殊字符的更纱黑体文件 sarasa-term-sc-regularNerd.ttf
选中一个,或者多个特殊字符,再到另个字体中右键,附加字体(这里不会覆盖已有的字符,有则跳过)
操作完成之后,生成字体,安装字体,设置字体,效果如下:
更纱字体有些偏小,需要将字号设置大些,如果出现个别地方乱码,需要从TypeTool3里打开的字符查找原因,看相对应的字符编码
这里的字符编码很方便,在自定义主题时,就可以从对应的字符上一眼看到字符编码
结束语:
至此本文就结束了,使用主题脚本会有一个加载时间,如果想要快速的打开PowerShell那就别用