oh-my-zsh-好看好用的shell-windows

上一级页面:index-windows

前言

但是比起主题受限的 PowerShell,我想可能还是 zsh 更加有吸引力;

Git Bash —— 一个基于 MinGW64 环境的仿 Linux 环境的终端,但是很多功能还是被删减了

我们先安装git和git bash,git-安装-配置

我们最终目的只是在Windows上跑一个完整的zsh,所以这里有两套方案,选择其中一套就可以了

一套是选择git提供的git sdk for windows:git-sdk安装与配置

另外一套是选择cygwin,cygwin-构建最小系统

两套方案各有优劣,这里给出基于git sdk的方案

在git sdk上安装zsh

一套方案是在git sdk上安装zsh

安装 Git SDK , Git SDK安装配置见git-sdk安装与配置

Git SDK 自带一个包管理器pacman,使用pacman安装 zsh。

运行git sdk,更新pacman源信息,首次更新可能需要重启;

1
pacman -Syu

pacman -Sy可以确保软件包最新。pacman -Syu将所有软件包升级到最新。

安装常用包

可以通过pacman -S <package-name>安装软件包

1
2
pacman -S wget
pacman -S git

安装zsh

首先要安装zsh,然后才能安装 oh-my-zsh:

1
pacman -S zsh  

安装oh-my-zsh

然后,我们安装 oh-my-zsh:

1
2
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"  
# ↑ 通过 curl

或者

1
2
通过 wget ↓  
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

当然,修改 host 文件,设置终端代理过于麻烦;我们可以科学上网后直接访问上述命令中的地址,获得脚本的内容后放到某个文件夹下,再使用 zsh 去执行脚本即可;

设为系统文件 + 隐藏文件

安装后脚本会在 ~ 目录下创建 .oh-my-zsh 目录,和 ~/.zshrc 在同一个目录中;这个 ~ 目录对应的就是 Windows 的用户文件夹,注意不要删掉它们;如果觉得碍眼可以把它们设为系统文件 + 隐藏文件(cmd 中的 attrib +s+h 或者 PowerShell 中的 $file.Attributes += 'hidden, system'),就不会在资源管理器中看到它们了;

安装插件

因为 MSYS2 pacman 中的 zsh 似乎没有包含一部分插件,所以若部分插件找不到,可以在这里下载,之后复制到 ~/.oh-my-zsh 文件夹的对应位置中即可;

配置oh-my-zsh

安装完成之后,我们就要将调教好的 zsh 终端增加到工作场景中集成了:

首先不建议将任何 Powerline 终端集成到 Jetbrains 的任何 IDE 中;因为 Windows 上的 Jetbrains IDE 的终端渲染比较的奇特:主要就是行间距太大,导致显示的图标会非常不好看。

配置见配置oh-my-zsh

字体问题(补充

因为 zsh 还是借助 Windows 的 conhost 或者其他终端软件运行,所以并不需要在~/.zshrc文件中修改字体;

shell字体配置

shell-字体配置

zsh集成到 Windows Terminal

默认的继承方式是通过 MSYS2 终端的启动脚本来运行 zsh:这个脚本在启动 shell 前会做许多事情,比如创建临时的系统变量空间,加载 rc 文件等,

所以即使你没有将 MSYS2 的二进制文件目录加入到系统变量,shell 也能找到它们:

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
{
"profiles": {
"defaults": {
"antialiasingMode": "cleartype",
"colorScheme": "One Half Dark",
"cursorShape": "bar",
"font": {
"face": "Menlo for Powerline",
"size": 14
},
"intenseTextStyle": "all",
"startingDirectory": "%USERPROFILE%"
},
"list": [
{
"commandline": "C:\\git-sdk-64\\msys2_shell.cmd -defterm -mingw64 -no-start -here -lic \"exec zsh\"",
"guid": "{A1589A38-7A15-B2A0-D9BD-31D8BC15E38D}",
"name": "win-zsh",
"hidden": false,
"icon": "C:\\git-sdk-64\\mingw64\\share\\git\\git-for-windows.ico"
}
]
}
}

这样没什么坏处,在该脚本初始化过程中会有大量系统变量地址映射

失败会报错,并且产生巨量输出(包括使用 MinTTY 也会产生这些输出),

集成到 VS Code

和上面一样,可以通过 msys2_shell.cmd 启动,也可以直接运行 zsh.exe 启动:

从工具栏中选择 文件 -> 首选项 -> 设置,打开设置页;在 功能 / 终端 中找到任何一个 在 settings.json 中编辑 按钮来打开 vscode 的配置文件;并且加上下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"terminal.integrated.profiles.windows": {
"Git Bash": {
"source": "Git Bash"
},
"win-zsh": {
"path": ["C:\\git-sdk-64\\msys2_shell.cmd"],
"args": [
"-defterm",
"-mingw64",
"-no-start",
"-here",
"-lic",
"cd $PWD; exec zsh"
],
"icon": "git-commit"
}
}
}

上面的配置指定了命令行、参数以及终端字体(可以和文本编辑器使用不同的字体);

命令参数中的 cd $PWD 是切换到当前目录,如果报错也可以不加(似乎还是会跳转到当前目录);

在 VS Code 中也有相当数量的 PL 字体存在行间距过大的问题,似乎也可以通过调整解决;

启动后会直接跳转到你的项目目录下,但是如果没有事先将 C:\git-sdk-64\usr\bin\ 增加到系统变量中,输入部分 Linux 命令可能会提示命令未找到错误;

参考、引用、致谢

在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)