Windows 是我用的最多的系统, 但是windows下默认的shell体验实在是太糟糕了, 不过, 如果你愿意折腾一番的话, 其实还是能在windows下获得比较好的shell体验的。

Windows下的bash环境

Git Bash

Git bash 是 git 在windows下提供的类bash环境, 把很多熟悉的linux命令与应用带到了windows, 例如curl, vim, grep, ssh, sed, xargs等等, 非常适合UN*X用户使用. 要安装git bash, 只要安装Git即可.

Git Bash Basic

PowerShell

PowerShell 是 Windows 加入的功能强大的Shell环境, 在这个shell中你可以使用部分常见的linux命令(ls, cat, curl, 具体参数用法与在linux中有所不同, 毕竟只是对应的powershell命令的别名), 因此无论你习惯用windows还是linux都能很快适应这个终端. 同时powershell具有极高可扩展性, 能直接与.Net交互.

现代windows已经预装了基于.Net Frameworkpowershell, 你也可以在此处安装基于.Net Core的跨平台PSCore

参考: PowerShell入门
powershell

Windows下更好的控制台终端 Terminal

终端Terminal决定了控制台窗口的外观. Windows下默认的终端是comhost, 这个终端丑就算了, 在中文环境下(代码页936)还无法使用不带中文字符集的字体, 这意味着无法使用像Consolas, Cascadia Code, Source code pro等字体. 同时comhost也不支持emoji显示, powerlines, otf字体显示等功能.

事实上中文环境无法使用英语字体的问题可以通过修改编码至utf-8编码来解决, 在设置 > 区域 > 其它区域设置 > 区域 > 管理 > 非Unicode区域设置 勾选Beta版: ...即可 但是这样做会导致系统自带指令输出变为英语, 但是至少我不介意=.=, 学学英语有啥不好的. 另外, 这样设置后会导致中文版Adobe After Effects拒绝启动, 如果要用ae的话就别这样设了.

这些问题最好的解决办法就是更换更好的Terminal, 这里我推荐两个终端:

  • Windows Terminal
  • Terminus

Windows Terminal

pros:

  1. UWP原生应用, 响应速度较快
  2. M$自家作品, 很有可能在未来会被直接预装在Windows 10中 cons: 目前配置仍然较为麻烦, 且功能不及Terminus多

Terminus

pros: 配置较为方便, 兼容性广 cons:

  1. Electron应用, 启动较为缓慢
  2. 目前Fluent Effect会出现拖动延迟问题

更好的控制台字体

这里我推荐两个字体

这两个字体其实是非常相似的, 它们都支持 code-specific ligatures, emm, 什么意思看看下面这张gif就明白了:
ligatures

它们之间的区别是基础字形稍微有些不同, 下面是它们的比较:
font-compare
可以明显看出, jetbrains Mono更加瘦长一点, 斜体的角度也更易于阅读 此外, Jetbrains Mono为尽量提高小字号下的辨析度去掉了一些不必要的字母细节, 但这样也导致了大写U和小写u比较难以区分.

Prompt优化

Prompt是一段文字, 用于指示此时正在接受命令。 它从字面上提示用户采取措施 –wikipedia

Git Bash

git bash的默认prompt是:

1
2
USER@PC MINGW32 ~/your/path/ (git_branch)
$

这段prompt其实已经比较完善了, 如果你仍然希望修改也非常简单。
git bash的prompt是通过一段bash脚本实现的, 其位置在/etc/profile.d/git-prompt.sh, 如果你不清楚这个文件的具体位置, 可以__以管理员权限__运行:

1
2
3
4
5
# 备份现有的脚本
cp /etc/profile.d/git-prompt.sh /etc/profile.d/git-prompt.bak.sh

# 使用Visual Studio Code打开编辑
code /etc/profile.d/git-prompt.sh

可以参考我修改的git prompt

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
TITLEPREFIX=bash

if test -f ~/.config/git/git-prompt.sh
then
. ~/.config/git/git-prompt.sh
else
PS1='\[\033]0;$TITLEPREFIX:`basename "\w"`\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[32m\]' # change to green
#PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1"'→ '
PS1="$PS1"'\[\033[35m\]' # change to purple
# PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
# PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
PS1="$PS1"'\w' # current working directory
if test -z "$WINELOADERNOEXEC"
then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
fi
fi
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
PS1="$PS1"' [`date +%H:%M:%S`]' # print time
PS1="$PS1"'\n' # new line
PS1="$PS1"'✗ ' # prompt: always ✗
PS1="$PS1"'\[\033[0m\]' # clear color
fi

MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc

效果:
bash

Powershell

1
PS C:\test\path>

Powershell的prompt可以说是…非常简陋, 相比起git bash既丑, 提供的有用信息也少。
好在powershell可以通过安装插件的方法来更改prompt, 这里我推荐oh-my-posh插件
使用下面的命令即可安装:

1
2
3
4
5
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

# PS Core需要执行下面的命令
Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

然后使用下面命令可以启用oh-my-posh:

1
2
3
4
# Start the default settings
Set-Prompt
# Alternatively set the desired theme:
Set-Theme Paradox

其中Set-Theme命令后可跟不同的prompt主题, 各个主题的效果可参见Themes
你也可以自己制作主题, 方法参见Create your own theme

值得注意的是, 为了能让posh正常显示, 必须使用带powerline的字体, 建议使用比较新的等宽编程字体, 例如Cascadia Code或者JetBrains Mono, 如果你仍然希望使用不兼容Powerline的字体, 例如Source code pro, 可以在这里下载它们的带powerline版本。
另外不要尝试在windows自带的conhost下用这个主题, 不支持的=。=, 建议用我上文提到的Windows Terminal PreviewTerminus

为了让每次启动powershell时都应用oh-my-posh, 需要修改配置文件, 执行下面命令:

1
2
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
code $PROFILE

visual studio code中输入以下内容

1
2
3
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox # 可更换成你想要的主题名字

嗯, 这样修改后的powershell还是比较好看的:

powershell