Make Windows Terminal Great Again!

之前外出办公都是拿公司的 MacBook Pro,终端当时也好好装修了一番。

还回去之后,找出了我 2014 年购买的 Windows 笔记本,这终端用起来就不太舒服了。

正好假期在家没事做,也给咱 Windows 的终端装修一个!

Fluent Terminal

出于个人的需求,Windows 上会频繁使用 PowerShell 及 WSL,但是两者自带的终端都不是很方便动手。

于是我搜索了半天,终于找到了一个比较满意的终端 Fluent Terminal

其他的或因为启动速度慢,或因为实在是不好看,都被个人 Pass 了。

安装方法很简单,在管理员模式下的 PowerShell 使用 Chocolatey 包管理工具直接进行安装。

个人图省事,直接借用了 Node.js 安装过程把 Chocolatey 及 Python 直接包圆了。

1
choco install fluent-terminal

由于安装过程的需要,部分行为可能会被某些软件判定高危并拦截,所以在安装前记得关闭这些软件。

尽职的火绒,只能先关掉你了

执行完成后 Fluent Terminal 就安装完成了。

字体

「工欲善其事,必先利其器」。

为了满足后续的要求,还需要先安装字体。

该字体就是大名鼎鼎的 Nerd Fonts 了。

在这里找到 Hack Nerd Font,下载后安装。

准备工作都做完了,接下来可以开始正式装修了。

正式装修

PowerShell

这次不打算对 PowerShell 动太大刀,毕竟目前也就跑点 Python 工具,使用程度不算重,oh-my-posh 之类的回头有时间再处理。

打开 Fluent Terminal,点开左上角菜单选择 设置 - 终端,将 字体 项选为 Hack Nerd Font Mono,字体大小看个人喜好。

再找到 配置文件 - Powershell - 编辑,将 主题 选为 PowerShell,保存。

PowerShell 的装修就暂告一段落了。

WSL

这个用得多,重头戏自然在这。

个人用的是 Ubuntu 20.04 LTS,其他发行版大同小异。

配置 Zsh

首先安装 Zsh 及 Oh My Zsh

1
2
apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

然后安装 Powerlevel10k 主题,这里使用 Oh My Zsh 的安装方法。

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
1
vim ~/.zshrc

ZSH_THEME 修改为 "powerlevel10k/powerlevel10k",并在下面另起一行粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
POWERLEVEL9K_MODE='nerdfont-complete'
#POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
#POWERLEVEL9K_SHORTEN_DELIMITER=""
#POWERLEVEL9K_SHORTEN_STRATEGY="truncate_from_right"
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=''
POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=''
POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=''
POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR=''
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{blue}\u256D\u2500%F{white}"
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{blue}\u2570\uf460%F{white} "
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(root_indicator dir dir_writable_joined)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(command_execution_time
vcs background_jobs_joined time_joined)
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND="clear"
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND="clear"
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="yellow"
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="yellow"
POWERLEVEL9K_DIR_HOME_BACKGROUND="clear"
POWERLEVEL9K_DIR_HOME_FOREGROUND="blue"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND="clear"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND="blue"
POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_BACKGROUND="clear"
POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_FOREGROUND="red"
POWERLEVEL9K_DIR_DEFAULT_BACKGROUND="clear"
POWERLEVEL9K_DIR_DEFAULT_FOREGROUND="blue"
POWERLEVEL9K_ROOT_INDICATOR_BACKGROUND="clear"
POWERLEVEL9K_ROOT_INDICATOR_FOREGROUND="blue"
POWERLEVEL9K_STATUS_OK_BACKGROUND="clear"
POWERLEVEL9K_STATUS_OK_FOREGROUND="green"
POWERLEVEL9K_STATUS_ERROR_BACKGROUND="clear"
POWERLEVEL9K_STATUS_ERROR_FOREGROUND="red"
POWERLEVEL9K_TIME_BACKGROUND="clear"
POWERLEVEL9K_TIME_FOREGROUND="cyan"
POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND='clear'
POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND='magenta'
POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND='clear'
POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND='green'

之后保存退出。

该主题是在 Show Off Your Config 找到的一款方案,详情点 这里,个人稍加修改了一下。

终端配色个人钟爱 OneHalfDark,Fluent Terminal 可以直接使用 iterm 的配色文件,下载保存 OneHalfLight.itermcolors,打开 设置 - 主题 - 导入,选择下载的文件,导入保存。

在主题列表中选中 OneHalfDark,选择 应用,也可以在 配置文件 - WSL - 编辑 中,将主题选为 OneHalfDark

目前看起来就是这个样子了:

干掉绿油油

经常用 WSL 都知道,在 WSL 用 ls 查看硬盘上的文件时,总会绿油油的一片,这究竟是为什么呢?

太瞎眼了

这边有一篇 Blog 讲到 DrvFs 文件权限问题,解释了为何会出现这样的问题。

那么如何解决呢?

如果不用那篇 Blog 中提到的解决方案,还可以直接修改 rc 文件来解决,方法来自 这里

1
2
3
cd
dircolors -p > .dircolors
vim .dircolors

修改如图所示的内容,将背景色改为文字颜色,再加上下划线区别。

然后最后再让其生效。

1
vim ~/.zshrc
1
2
3
4
5
6
7
8
9
10
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
1
source .zshrc

现在看起来就好多了。

Windows Terminal

其实 Windows Terminal 也不错,在折腾完 Fluent Terminal 后,只需要少量的设置就能够使用了,可以拿来作为备选方案。

字体

Windows Terminal 可以为不同的 Shell 设置不同的字体,那么对于经常用在中文环境的 PowerShell 来说,我更喜欢 更纱黑体 一些,下载后安装即可。

配置

Windows Terminal 的配置完全靠修改 json 文件实现,但是这样有了更大的自由度。

首先找到 PowerShell 那段,比如:

1
2
3
4
5
6
7
{
// Make changes here to the powershell.exe profile.
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"hidden": false
}

稍微修改后就变成这样:

1
2
3
4
5
6
7
8
9
10
11
{
// Make changes here to the powershell.exe profile.
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"fontFace" : "Sarasa Mono SC",
"fontSize" : 12,
"background": "#123456",
"colorScheme" : "One Half Dark",
"hidden": false
}

这里试了试 #123456 颜色比 Fluent Terminal 里 PowerShell 主题的 #012456 要更舒服,于是回过头把 Fluent Terminal 里也改了(Copy 一份后再修改)。

WSL 部分也修改了一下:

1
2
3
4
5
6
7
8
9
{
"guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
"hidden": false,
"name": "WSL",
"source": "Windows.Terminal.Wsl",
"fontFace" : "Hack Nerd Font Mono",
"fontSize" : 14,
"colorScheme" : "One Half Dark"
}

顺便把 Azure Cloud Shell 给隐藏了:

1
2
3
4
5
6
7
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure",
"hidden": true
}

找到 defaultProfile 这项,将其中的值改为需要的 Shell 的 guid,这里选择了 WSL:

1
2
3
{
"defaultProfile": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}"
}

再找到 keybindings 这项,加个 Ctrl+W 关闭标签的快捷键:

1
2
3
4
5
6
7
8
{
"keybindings":
[
……
{ "command": "closeTab","keys": "ctrl+w" },
……
]
}

最后的效果也还是不错的嘛。

写在最后

现在 Windows 上使用终端的体验是越来越好了,个人对于虚拟机、双系统的依赖也是越来越低了。

希望微软自家的 Windows Terminal 能够再接再厉,我可是相当看好哟!