Windows Terminal 美化

一个每天都要面对的东西,不好看会影响心情的🐶。(终于要把欠下的博文写完了,腹泻式更新结束咯)

搜到的很多方法已经过时了,最后还是老老实实跟着Oh My Posh 官方文档来配置了

更新PowerShell

首先使用$psversiontable命令查询PowerShell版本,系统自带的是5.1版本,现在最新的版本是7.2,两个版本相互独立,可以同时安装,这里我安装了新版本。

安装后打开Windows Terminal,在设置里将默认配置文件修改为PowerShell(系统自带的版本叫Windows PowerShell)
ps1.png

更换字体

选择字体的时候要选用含有Nerd fonts的字体,否则一些图标会显示为乱码。字体我使用了sarasa-mono-sc-nerd-font,即附加了Nerd字体的简体等距更纱黑体。下载链接如下,我下载的是sarasa-mono-sc-nerd-font.zip

Nerd Fonts 是一个使用大量字体图标来解决程序员在开发过程中缺少合适字体的问题的项目。它可以从流行的字体图标库中将大量外部字体引入待开发的项目中,它支持的字体图标库包括 Font Awesome, Devicons, Octicons等。

等距更纱黑体是由Iosevka和思源黑体组合而成的免费开源字体,适合在终端中使用

字体后缀

引用自zrqlx126的文章,特此感谢

下载后解压并安装需要的字体,字体后缀的意思如下

附加术语

  • unhinted-无微调字体
  • ttf-TrueType字体文件格式
  • ttc-TrueType字体集文件格式(更纱黑体按照字重进行分类,合并了相近ttf字体文件)

第一个连字符后的名称

  • gothic-引号为全宽
  • ui-引号为窄的
  • mono-破折号为全宽
  • term-破折号为半宽
  • fixed-不连字、且破折号为半宽

第二个连字符后的名称

  • cl-古典汉字字形
  • sc-简体汉字字形
  • tc-繁体汉字字形
  • j-日文汉字字形
  • k-韩文汉字字形
  • hc-香港汉字字形

第三个连字符后的名称

  • slab-超厚笔划字形
  • regular-常规字体
  • italic-斜体字体
  • extralight-超细字体
  • light-细体字体
  • semibold-半粗字体
  • bold-粗体字体
  • extralightitalic-超细斜体
  • lightitalic-细斜字体
  • semibolditalic-半粗斜体
  • bolditalic-粗斜字体

第四个连字符后的名称

  • nerd-附加了Nerd fonts

然后在Windows Terminal的设置-配置文件-PowerShell-外观-字体中将字体设置为等距更纱黑体 SC Nerd Font
字体更换.png

安装美化模块

使用winget安装美化模块Oh My Posh

1
winget install JanDeDobbeleer.OhMyPosh -s winget

然后重启Windows Terminal,使用下面的命令打开PowerShell的配置文件

1
notepad $PROFILE

如果提示找不到配置文件的话用下面的命令创建

1
New-Item –Path $ProfileType File –Force

粘贴并保存

1
oh-my-posh init pwsh | Invoke-Expression

执行下面的命令重载配置文件或者重启Windows Terminal就能看到变化了

1
. $PROFILE

更换主题

Oh My Posh提供了很多主题,可以输入下面的命令或者去官网查看主题预览

1
Get-PoshThemes

找到合适的就把下面的命令复制到PowerShell配置文件中

1
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/主题名称.omp.json" | Invoke-Expression

例如我选用的takuya主题配置为

1
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/takuya.omp.json" | Invoke-Expression

但是我不太喜欢主题的配色,想自己调整一下。

可以使用下面的命令导出当前使用的主题配置文件,我这里导出的路径是~/.pwshtheme.omp.json,也就是C:\Users\用户名\.pwshtheme.omp.json,请根据自己的需要修改。另外,Oh My Posh自带的主题文件在C:\Users\用户名\AppData\Local\Programs\oh-my-posh\themes中,可以参考一下里面配置文件的写法。

1
oh-my-posh config export --output ~/.pwshtheme.omp.json

然后打开文件修改配色即可。

如果想要修改更多内容请参照官方文档说明

修改完成后使用notepad $PROFILE打开PowerShell的配置文件,替换掉原来的主题配置,注意路径。

1
2
+ oh-my-posh init pwsh --config "~/.pwshtheme.omp.json" | Invoke-Expression
- oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/takuya.omp.json" | Invoke-Expression

安装Scoop

下面的内容参考了P3TERX的文章,特此感谢

Scoop 是一个 Win­dows 包管理工具,下面的Neofetch需要使用Scoop来安装

1
Invoke-WebRequest get.scoop.sh | Invoke-Expression

配置代理

然后为Scoop配置代理,结合自己梯子的端口修改端口号,不然会一直报错

1
scoop config proxy localhost:7890

取消代理命令为

1
scoop config rm proxy

安装extras bucket

可以为scoop添加额外的bucket。bucket就是一个软件仓库,Scoop安装后会有Main bucket,但是它的收录条件较为严格,所以最好再安装一个extras bucket,extras bucket可以提供更多的软件,甚至有Steam,不过不建议这么干就是咯。

安装命令如下

1
scoop bucket add extras

常用命令

  • scoop update —— 更新 scoop 及软件包列表
  • scoop install -k <app> —— 非全局安装(并禁止安装包缓存)
  • scoop install -gk <app> —— 全局安装(并禁止安装包缓存)
  • scoop uninstall -p <app> —— 卸载非全局软件(并删除配置文件)
  • scoop uninstall -gp <app> —— 卸载全局软件(并删除配置文件)
  • scoop update -k * —— 更新所有非全局软件(并禁止安装包缓存)
  • scoop update -gk * —— 更新所有软件(并禁止安装包缓存)
  • scoop cleanup -k * —— 删除所有旧版本非全局软件(并删除软件包缓存)
  • scoop cleanup -gk * —— 删除所有旧版本软件(并删除软件包缓存)
  • scoop cache rm * —— 清除软件包缓存
  • scoop bucket list —— 查看所有bucket

辅助模块

下面的内容参考引用了Awesome PowerShell,特此感谢

检查脚本执行策略

首先检查脚本执行策略设置,共有四种策略

1
Get-ExecutionPolicy
  • Restricted——默认的设置, 不允许任何script运行
  • AllSigned——只能运行经过数字证书签名的script
  • RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script必须要有数字签名
  • Unrestricted——允许所有的script运行

如果不是RemoteSigned或者Unrestricted的话执行下面的命令修改策略,否则一些模块无法安装

1
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm

posh-git

posh-git是一个PowerShell模块,它将Git和PowerShell整合在一起,可以在PowerShell中显示Git状态的汇总信息。它也为常见的git命令、分支名称、路径等提供Tab补全功能。

1
PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force

然后执行下面的命令来引入模块

1
Add-PoshGitToProfile

或者在PowerShell配置文件中添加

1
Import-Module posh-git

然后重载配置文件或者重启Windows Terminal,输入git fe,然后按下Tab,如果能够自动补全为git fetch就说明成功了

PSReadLine

下面的内容参考引用了微软官方文档about_PSReadLine

PSReadLine 2.1 为 PowerShell 控制台提供了强大的命令行编辑体验。 提供以下功能:

  • 命令行的语法着色
  • 语法错误的直观指示
  • (编辑和历史记录的更好的多行体验)
  • 自定义键绑定
  • Cmd 和 Emacs 模式
  • 许多配置选项
  • 在 Cmd 模式下,Bash 样式完成 (可选,默认值为 Emacs 模式)
  • Emacs yank/kill 循环
  • 基于 PowerShell 令牌的 “word” 移动和删除
  • 预测 IntelliSense

PSReadLine 2.1.0 随 PowerShell 7.2 一起提供,并在所有支持的 PowerShell 版本中受支持。所以就不需要额外安装了。

配置

首先打开配置文件

1
notepad $PROFILE

粘贴下面的内容

1
2
3
4
5
6
7
Set-PSReadLineOption -PredictionSource History # 设置预测文本来源为历史记录

Set-PSReadlineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
Set-PSReadLineKeyHandler -Chord "Ctrl+RightArrow" -Function ForwardWord # 设置 ctrl + 向右键逐字补全
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录

保存后重载配置文件或者重启Windows Terminal

使用

  • —— 自动补全联想内容
  • CTRL+ —— 逐字补全联想内容
  • —— 搜索历史命令
  • Tab —— 补全
  • CTRL+z —— 撤销

ZLocation

ZLocation是Jump-Location的翻版,它可以基于以前运行的命令数量追踪你最常用的目录。在一个短暂的学习阶段之后,z将带你到最受欢迎的目录,该目录与命令行上给出的所有正则表达式相匹配。你可以使用Tab-Completion/Intellisense来挑选不是首选的目录。

安装

使用下面的命令一键安装+配置

1
Install-Module ZLocation -Scope CurrentUser; Import-Module ZLocation; Add-Content -Value "`r`n`r`nImport-Module ZLocation`r`n" -Encoding utf8 -Path $PROFILE.CurrentUserAllHosts

使用

  • z —— 显示已知的文件夹以及它们的权重
  • z c: —— 切到C盘
  • z zlo —— 切到ZLocation文件夹(简写)
  • z -l foo —— 查看所有与foo匹配的位置
  • z - —— 跳转到前一个跳转的目录或者初始文件夹

The Fuck

The Fuck是一个很好玩的东西,可以输入fuck来修正前一条报错的指令。

安装

安装The Fuck前需要安装Python(3.4+)pippython-dev。安装命令为

1
pip install thefuck

配置

打开PowerShell的配置文件

1
notepad $PROFILE

粘贴下面的内容

1
2
$env:PYTHONIOENCODING="utf-8"
iex "$(thefuck --alias)"

保存后重载配置文件或者重启Windows Terminal

使用

输入错误的命令后再输入fuck,然后按Enter确认
thefuxk.png

升级

1
pip3 install thefuck --upgrade

gsudo

gsudo是Windows的一个sudo替代品,具有与原始*nix sudo类似的用户体验。它允许在当前控制台窗口或新窗口中以高权限运行命令,或提升当前shell的权限。免得每次需要提权都要重新以管理员身份运行PowerShell,而且重新运行还会丢失之前的记录。

安装

老方法,winget安装

1
winget install gsudo

减少UAC弹窗

可以通过启用凭证缓存的方式,来实现gsudo多次提权而只显示一个UAC弹窗。

1
gsudo config CacheMode auto

Windows Terminal设置

以下设置可以单独针对PowerShell生效,也可以在设置-配置文件-默认值种调整为默认配置,对所有未进行单独设置的shell生效。

配色方案

上面调整了PowerShell的主题,但是输入输出的字体配色还是原来的亚子,它们是由Windows Terminal的配色方案控制的。默认有8种配色方案,不过嘛,都挺辣眼睛的。好在可以自己创建配色方案。

打开Windows Terminal的设置,找到配色方案,点击右侧的新增,创建自己的配色方案,然后逐个更改颜色。修改完成后点击保存.
配色方案.png

然后去下面的Powershell配置文件,找到外观-配色方案,将它调整为自己刚才创建的配色方案。
配色方案2.png

亚克力效果

打开Windows Terminal的设置,找到Show acrylic in tab row (requires relaunch)并开启,重启Windows Terminal可以看到顶栏已经开启了亚克力效果。

然后去下面的Powershell配置文件,找到外观-透明度-Enable acrylic并开启,然后可以看到窗口背景也开启了亚克力效果。可以根据自己喜好微调透明度,我调成了85%。

背景图片

依然在Powershell配置文件中,找到外观-背景图像-背景图像路径,选择背景图片,然后调整背景图像不透明度

完工

折腾了一下午,终于搞完了,附上一张完工图,比原来的红蓝配色好多咯
ps完工.png