在windows上的真正适合强迫症的终端环境

Author Avatar
EdgeNeko 4月 17, 2020
  • 在其它设备中阅读本文章

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

TODO

更好的控制台字体

这里我推荐两个字体

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

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

Prompt优化

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

Git Bash

git bash的默认prompt是:

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

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

# 备份现有的脚本
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

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

PS C:\test\path>

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

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:

# 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, 需要修改配置文件, 执行下面命令:

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

visual studio code中输入以下内容

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

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

powershell

如果你无法看到下面的disqus评论区, 请检查你的科学上网设置.