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

开源源码 管理员 10个月前 (01-19) 2057次浏览 0个评论

起始篇:

日常在使用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

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

 

自定义主题修改篇:

参考官方文档

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

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

 

个人认为比较有特点的是: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 ,需要配合使用,当命令错误时触发

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

 

 复制代码 隐藏代码
{
        "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里终端的字体

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

 

最终效果

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

 

字体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

字体工具 TypeTool3 增加字符篇

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

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

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

 

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

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

 

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

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

结束语:

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

喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址