写在前面

众所周知,Windows 官方并没有什么好用的 shell —— cmd 太过古老,而 powershell 又太慢。
第三方替代品也很多,比如旨在模拟 Linux API 的 Cygwin、msys/msys2 和 WSL1;亦或者重新实现的 POSIX shell,如 gsh。还有一些新兴的跨平台 shell,如 NuShell……

本文将介绍另一种邪术:在 Windows 上直接运行 zsh/fish。
其实是利用了 Git for Windows 的 msys2 环境

某些 shell,宁可换一种语言重写,都不愿意做 Windows 的支持 😭
说的就是你,fish

How To

首先安装 git,在此推荐使用 scoop 管理 Windows 下的软件包。

1
$ scoop install git

接着再去下载 msys2 的 zsh,下载完成后解压 etcusr 文件夹到 git 的安装目录中:
1728563025827

我们已经可以在 git bash 中启动 zsh 了:
1740407324153

此时已经拥有了一个完整的 shell 环境,像 zsh-autosuggestionzsh-completionszsh-syntax-highlighting 的 zsh 插件也可以正常使用。

实际上,git 提供了一个完整(并非完整)的 msys2 环境,几乎所有的 msys2 包都可以运行起来。只是由于缺少包管理器(如 pacman),我们得手动处理依赖关系。

后记

在测试过程中,也发现了一些不兼容的奇怪现象。比如,在开启 zsh-syntax-highlighting 后,输入时会出现“光标闪回”:
1740408288690

再比如,使用 vim 时会出现全屏闪烁的情况:
1740408610916

可能是 msys2 和 Windows Terminal 之间存在奇怪的兼容性问题(

于是我又用回了 clink + WSL 的组合(逃