SnowRen 发表于 2022-1-12 16:13

PowerShell美化oh-my-posh主题及特殊字符替

本帖最后由 SnowRen 于 2022-1-12 17:53 编辑

# 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 的存放位置:

```text
文档\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,开始导入模块,下载主题,需要等几分钟,完毕后,就可以看到不一样的命令提示符

查看已有的主题,使用命令

```powershell
get-poshthemes
```







### 自定义主题修改篇:

参考官方文档

(https://ohmyposh.dev/docs/)

找到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

```json
{
      "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 "
      }
},
```

```json
{
      "type": "executiontime",
      "style": "powerline",
      "powerline_symbol": "\uE0B0",
      "background": "lightYellow",
      "foreground": "#3f3f3f",
      "properties": {
                "threshold": 0,
                "style": "roundrock",
                "prefix": "\ufbab"
      }         
},
```

比较特殊的是 exit ,需要配合使用,当命令错误时触发



```json
{
      "type": "exit",
      "style": "plain",
      "foreground": "#e0f8ff",
      "properties": {
                "prefix": "\ue285ff",
                "display_exit_code": false,
                "always_enabled": true,
                "error_color": "#ef5350"
      }
},
```



### 乱字符处理篇:

刚配置好的Oh-my-posh主题,绝大多数主题都会出现乱码,这是因为主题里用了很多特殊的字符(符号),官方文档已经说的很明确了,主题是居于Nerd Fonts 字体设计的。

(https://www.nerdfonts.com/)

安装官方建议的字体后,乱码问题就解了

VSC仍然乱码,则需要设置一下VSC里终端的字体



最终效果





### 字体Patch篇

试了Nerd Fonts 的全部字体,中文显示都不太理想

Nerd Fonts 官方还有另一种解决方案,一个可以Patch字体的脚本,自定义属于自己的字体

https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/font-patcher

font-patcher脚本折腾了三天都没搞定,可以直接跳过本篇,功力足够的网友可以偿试一下

下面仅是本人折腾的过程:

下载字体库:

```text
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模块

```text
pip install python-fontforge                #出错
pip install python3-fontforge                #成功
```

报错

```
FontForge module is probably not installed.
```

安装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



### 字体工具 TypeTool3 增加字符篇

Patch字体不成功,从网上找到这个软件最终实现了增加字符的功能,操作极其简单

准备

先从Nerd Fonts 官方下载一套字体,作为特殊字符提取源,建议下载 Meslo Nerd Font

(https://www.nerdfonts.com/font-downloads)

本人日常使用的是更纱黑体,(至于大家想替换的目标字体,自行准备,前提是PowerShell能识别得出来)

下载地址:

(https://github.com/Moyf/Sarasa-Gothic)

用TypeTool3同时打开两个字体

一个是含特殊字符的 Meslo Nerd Font 字体文件 Meslo LG S Regular Nerd Font Complete Windows Compatible.ttf

另一个是不含的特殊字符的更纱黑体文件 sarasa-term-sc-regularNerd.ttf

选中一个,或者多个特殊字符,再到另个字体中右键,附加字体(这里不会覆盖已有的字符,有则跳过)



操作完成之后,生成字体,安装字体,设置字体,效果如下:



更纱字体有些偏小,需要将字号设置大些,如果出现个别地方乱码,需要从TypeTool3里打开的字符查找原因,看相对应的字符编码

这里的字符编码很方便,在自定义主题时,就可以从对应的字符上一眼看到字符编码



### 结束语:

​      至此本文就结束了,使用主题脚本会有一个加载时间,如果想要快速的打开PowerShell那就别用

senwar 发表于 2022-1-19 10:48

感谢分享~~~

maodaye 发表于 2022-5-2 20:14

请问这种情况怎么解决?

SnowRen 发表于 2022-5-4 10:42

maodaye 发表于 2022-5-2 20:14
请问这种情况怎么解决?

明显是低版本的字体或不兼容的字体,换字体即可,到nerdfonts官网下载:https://www.nerdfonts.com/font-downloads

maodaye 发表于 2022-5-4 14:33

SnowRen 发表于 2022-5-4 10:42
明显是低版本的字体或不兼容的字体,换字体即可,到nerdfonts官网下载:https://www.nerdfonts.com/font- ...

好的,非常感谢

aichiyu 发表于 2022-9-20 18:31

这教程很坑人

skypaladin 发表于 2022-9-20 20:43

大佬们PS都玩出花了,求中文PDF教程。

爱咪哆 发表于 2022-10-5 03:46

aichiyu 发表于 2022-9-20 18:31
这教程很坑人

此教程已过时

yippee 发表于 2023-4-3 10:34

ms官方有 教程:使用 Oh My Posh 为 PowerShell 或 WSL 设置自定义提示符
页: [1]
查看完整版本: PowerShell美化oh-my-posh主题及特殊字符替