改装 PowerShell


作为 Windows 下的终端, PowerShell 一直以来都显得不太好用, 简陋的背景, 不好看的字体, 难用的命令.

而 PowerShell 事实上还算一款较为强大的命令行工具, 今天就来将其改装成为真正的生产力工具.

主要涉及: 字体, 颜色, 终端, oh-my-posh, PSReadLine

首先从外表开始

更改终端字体

Windows 下的字体总是显得简陋, 当然这是由于历史包袱严重, 难以直接更改, 也因此出现了一系列修改字体的工具, 如 MacType, 但是使用工具修改字体具有一定的风险性.

更加安全一点的方案是使用特制的字体, 比如这款: Sarasa Gothic/更纱黑体/更紗黑體/更紗ゴシック/사라사 고딕

Release 中下载最新版, 可以选择只安装简体中文版, 即包含 SC 的字体.

Windows 选择 ttf 文件即可, 本文撰写时最新版为 sarasa-gothic-ttf-0.12.5.7z

Windows 控制台在中文系统下, 默认是新宋体, 显示效果很差, 将其更改为刚安装的更纱黑体, 这里选择的是 Sarasa Term SC, 字号为 20:

如果找不到对应的字体, 或是更改之后没有发生变化, 可能是因为默认代码页为 GBK, 可以尝试更改代码页到 UTF-8:
chcp 65001
然后再进行尝试.

然后就能发现 PowerShell 已经有了明显的变化.

更改终端配色

PowerShell 的默认蓝底白字配色也有点丑陋.

微软官方提供了一个更换 PowerShell 配色的小工具:ColorTool.exe,我们可以利用它来更换 PowerShell 的主题颜色。ColorTool 支持 iTerm 主题(以 .itermcolors 结尾的主题文件)。

我们可以从 ColorTool 的 GitHub 页面 下载这个小工具。当然,如果你使用 Scoop,也可以这样安装:

1
scoop install colortool

值得注意的是,如果你是直接从 GitHub 上面下载了 colortool.zip 并解压,colortool.exe 的路径就并没有自动加入环境变量,所以你没有办法全局调用这个工具。因此我更加推荐利用 Scoop 这个优质的包管理来安装 ColorTool。

推荐阅读:「一行代码」搞定软件安装卸载,用 Scoop 管理你的 Windows 软件

ColorTool 使用非常简单。工具自带了几种主题,我们可以利用下面这个命令进行查看:

1
2
# 注:-s 代表 schemes
colortool -s

几个自带配色主题

其中前面列出的几个 .ini.itermcolors 就是主题配置文件,我们可以直接通过下面这个命令设置主题:

1
2
3
4
# 临时查看
colortool <主题名称>
# 定义默认值
colortool -d <主题名称>

比如我们希望将主题配色更换为 OneHalfDark.itermcolors,只需要输入下面这个命令就可以更换并预览更新:

1
colortool OneHalfDark

更换主题

由于 ColorTool 直接支持 iTerm 主题配置文件,因此我们可以在 iterm2colorschemes 这个网站找到我们想要的主题背景进行配置,方法和上面介绍的一样:在 PowerShell 中定位至你希望更换的主题文件,使用命令 colortool <主题名称>.itermcolors 进行配置即可。同时,如果你对上面的主题都不满意,你也可以直接在这个网站: terminal.sexy 自行配置自己想要的主题,并通过同样的方式进行应用。

不过从 iTerm2 Color Schemes 的配色方案实在是太多了,选起来本身也是个麻烦事,我最后在这几款中选出了下面这几款配色,感觉还不错,推荐给大家:

添加效率工具

配置文件路径

PowerShell 的配置文件一般都在 $HOME\Documents\WindowsPowerShell 目录下, 并且可能会存在多个 .ps1 文件

  • Microsoft.PowerShell_profile.ps1: 这个是 PowerShell 终端的配置文件, 在这里更改的设置只会在系统自带的 PowerShell 终端中生效, 在其他位置, 比如 VS Code, Cmder 中不会生效.
  • Microsoft.VSCode_profile.ps1: 和上面同理, 不过是在 VS Code 中生效.
  • profile.ps1: 这个是 PowerShell 的全局配置文件, 在多个位置都会生效.

新增(或修改)你的 PowerShell 配置文件 Microsoft.PowerShell_profile.ps1:

1
2
3
4
5
# 如果之前没有配置文件,就新建一个 PowerShell 配置文件
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }

# 用记事本打开配置文件
notepad $PROFILE

PSReadLine

PowerShell 无法开箱即用的另一个原因是命令补全和历史搜索功能很差劲. 官方维护的有一个 PSReadLine 项目, 用于实现类似于 Linux 下 Bash 的命令补全功能.

官方推荐使用 PowerShellGet 安装, 不过首先需要安装这个模块:

1
Install-Module -Name PowerShellGet -Force

之后通过 PowerShellGet 安装 PSReadLine:

1
2
3
4
5
# 安装最新版
Install-Module PSReadLine -AllowPrerelease -Force

# 安装稳定版
Install-Module PSReadLine

之后需要启动并配置 PSReadLine, 在配置文件中加入如下内容, 便可实现一个基本的 Shell 功能:

1
2
3
4
5
6
7
8
9
10
Import-Module PSReadLine

# 历史命令搜索
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

# 补全功能
Set-PSReadLineKeyHandler -Key Ctrl+q -Function TabCompleteNext
Set-PSReadLineKeyHandler -Key Ctrl+Q -Function TabCompletePrevious

也可参考官方的样例 SamplePSReadLineProfile.ps1 实现自己想要的功能

Oh-my-posh

和 Linux 下大名鼎鼎的 oh-my-zsh 类似, 针对于 PowerShell 也有对应的 oh-my-posh.

我们通过在 PowerShell 中执行下面的命令安装配置 oh-my-posh

1
2
Install-Module posh-git -Scope CurrentUser 
Install-Module oh-my-posh -Scope CurrentUser

然后让 PowerShell 配置生效. 需要修改 PowerShell 配置文件, 在其中添加下面的内容:

Microsoft.PowerShell_profile.ps1
1
2
3
4
Import-Module posh-git 
Import-Module oh-my-posh
$DefaultUser = 'Your User Name'
Set-Theme Agnoster

其中最后一句 Set-Theme <主题名> 就是配置主题的命令。而 $DefaultUser 则可以用来隐藏用户名, 使 PowerShell 看起来更简洁.

如果一切顺利,你应该看到你的 Prompt 部分变成了类似这个的样子:

注意:如果你发现后面的日期显示出现了凌乱的现象(比如本该在同一行显示的字符却跑到了下一行),多半是因为显示了中文。目前很多终端都不能正常的显示中文或 CJK 字符(即:Double-width character),所以你可以通过下面这个命令将 PowerShell 的环境设置为 en-US 的英文环境:

1
Set-Culture en-US

Bug Fix

部分符号字体无法显示

如果你使用 oh-my-posh,并且在 oh-my-posh 里面配置了 PowerLine 命令提示符的话,你会发现,在进入 Git 目录时会看到命令提示符中有个“□”:

字体中的乱码

这个是个表情符“✎”,但是因为 Sarasa 系列字体中不包含表情符,因此就只能显示乱码了。不过也有解决办法,打开注册表编辑器,找到路径:

1
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

在其中新建多字符串值,名称为:Sarasa Term SC,内容为:

1
2
3
4
5
6
7
8
9
10
MICROSS.TTF,Microsoft Sans Serif,108,122
MICROSS.TTF,Microsoft Sans Serif
MINGLIU.TTC,PMingLiU
MSMINCHO.TTC,MS PMincho
BATANG.TTC,Batang
MSYH.TTC,Microsoft YaHei UI
MSJH.TTC,Microsoft JhengHei UI
YUGOTHM.TTC,Yu Gothic UI
MALGUN.TTF,Malgun Gothic
SEGUISYM.TTF,Segoe UI Symbol

这段内容是复制的宋体 SimSun 的,如果你愿意的话,可以用同样的方法把 Sarasa 系列的都注册一下,也可以只修改要使用的这个,然后重启计算机就可以了。

参考链接

作者

Cheng

发布于

2020-04-24

更新于

2022-08-06

许可协议

评论