zsh 终极shell

Zsh(Z Shell)是一个功能强大的Unix Shell程序,它在兼容Bash的同时提供了更丰富的功能,例如更智能的自动补全、拼写纠正、主题美化等。Oh My Zsh是一个十分流行的开源Zsh配置管理框架,Oh My Zsh提供了大量开箱即用的主题和插件,极大降低了Zsh的配置门槛,目前几乎是Zsh的标准搭配。这篇笔记我们介绍Zsh和Oh My Zsh的安装与使用。

Zsh功能特性

Zsh兼容绝大部分Bash语法,但它提供了很多Bash不具备或需要额外配置才能实现的功能,下面列举一些日常使用中比较明显的改进。

更强大的Tab补全:Zsh的自动补全功能比Bash强大得多。例如输入cd后按Tab键,Zsh会以交互式菜单的形式展示所有可选目录,支持用方向键选择,而不是像Bash那样简单地罗列一堆文件名。此外,Zsh的补全对命令参数也有很好的支持,例如输入git后按Tab,它会补全Git的子命令和参数,甚至能补全分支名。

路径简写:在Zsh中,输入路径时可以只写每个目录的前几个字母,然后按Tab补全。例如输入cd /u/l/b然后按Tab,Zsh会自动补全为cd /usr/local/bin

右侧提示符:Zsh支持在终端右侧显示提示文本(通过RPROMPT变量),可以用来显示时间、Git分支等信息,而不占用左侧的输入空间。

安装Zsh

以Ubuntu系统为例,我们直接从APT源安装即可。

apt install zsh

安装完成后,Zsh并不会自动替换当前的默认Shell(通常是Bash),我们需要手动切换,执行以下命令将当前用户的默认Shell更改为Zsh。

chsh -s $(which zsh)

修改完成后,Zsh需要注销并重新登录才能生效,如果你使用的是SSH连接远程访问Linux主机,那么exit再重新登录即可。重新登录后,可以通过以下命令确认当前使用的Shell。

echo $SHELL

如果输出/usr/bin/zsh/bin/zsh,说明切换成功。

安装Oh My Zsh

Oh My Zsh是目前最流行的Zsh配置框架,它本质上是一个管理Zsh配置的工具,其中提供了数百个主题和插件。

Github地址:https://github.com/ohmyzsh/ohmyzsh.git

安装Oh My Zsh非常简单,直接执行官方提供的安装脚本即可,运行脚本后会自动从Github下载必要的文件并安装,注意如果你不能访问Github可能会安装失败,国内用户可能需要配置代理或使用镜像源。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Oh My Zsh配置

Oh My Zsh的所有配置都集中在~/.zshrc文件中,修改后执行source ~/.zshrc即可生效。

主题配置

Oh My Zsh内置了大量主题,主题文件存放在~/.oh-my-zsh/themes/目录下,修改~/.zshrc中的ZSH_THEME变量即可切换主题。

ZSH_THEME="agnoster"

目前最流行的几个常用主题如下。

  • robbyrussell:默认主题,简洁实用
  • agnoster:信息丰富,支持显示Git状态、Python虚拟环境等
  • ys:简洁明了,显示用户名、主机名、路径和Git信息(个人最喜欢)
  • random:每次打开终端随机选择一个主题,适合还没确定用哪个主题的用户尝鲜

如果设置为random,Oh My Zsh会在每次启动时随机选择一个主题,方便我们挑选自己喜欢的样式。

注意:部分主题(如agnosterpowerlevel10k等)需要终端安装Powerline字体或Nerd Font字体,否则特殊符号会显示为乱码。

完整的主题列表和预览可以参考Oh My Zsh的Wiki页面:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

插件配置

Oh My Zsh的插件功能是它的核心优势之一。插件配置同样位于~/.zshrc文件中,修改plugins数组即可启用插件,插件名之间用空格分隔。

plugins=(git z sudo extract)

Oh My Zsh自带了大量插件,存放在~/.oh-my-zsh/plugins/目录下,直接在配置中添加插件名即可启用,无需额外安装,下面介绍几个比较实用的插件。

git插件

git插件是Oh My Zsh默认启用的插件,它提供了大量Git命令的快捷别名,下面列举一些常用别名。

别名 对应命令
gst git status
ga git add
gcmsg git commit -m
gp git push
gl git pull
gco git checkout
gb git branch
glog git log --oneline --decorate --graph

习惯之后可以显著减少Git操作的键入量。完整的别名列表可以通过alias | grep git查看。

z插件

z插件是一个目录跳转工具,它会记录我们日常cd过的目录,之后可以通过模糊匹配快速跳转。例如我们经常访问/home/ubuntu/projects/myapp目录,使用z插件后只需输入以下命令即可跳转。

z myapp

z插件是Oh My Zsh自带的,直接在plugins中添加即可,无需额外安装。

sudo插件

sudo插件提供了一个非常方便的功能:当我们输入一条命令后发现忘记加sudo了,只需按两下Esc键,Oh My Zsh会自动在命令前面补上sudo。这个插件也是自带的。

extract插件

extract插件提供了一个统一的解压命令extract(或简写x),它能自动识别压缩格式并调用对应的解压工具,支持.tar.gz.zip.rar.7z等几乎所有常见压缩格式,省去了记忆各种解压命令参数的烦恼。

extract archive.tar.gz
extract file.zip

安装第三方插件

除了内置插件,Oh My Zsh社区还有大量优秀的第三方插件,这些插件需要手动下载到Oh My Zsh的插件目录中,下面介绍两个几乎是"必装"的第三方插件。

zsh-autosuggestions

zsh-autosuggestions插件会根据历史命令记录,在输入时以灰色文字自动提示补全建议,按右方向键即可接受建议。这个功能类似于PowerShell的自动建议,用过之后就很难回去了。

执行以下命令安装zsh-autosuggestions插件。

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

然后在~/.zshrcplugins中添加zsh-autosuggestions即可。

zsh-syntax-highlighting

zsh-syntax-highlighting插件会对终端中输入的命令进行语法高亮,正确的命令显示为绿色,错误的命令显示为红色,路径存在时会加下划线等,能够帮助我们在执行命令前就发现拼写错误。

执行以下命令安装zsh-syntax-highlighting插件。

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

同样在~/.zshrcplugins中添加zsh-syntax-highlighting即可。

注意:zsh-syntax-highlighting插件建议放在plugins列表的最后一个位置,否则可能影响其他插件的功能。

常见问题

关闭自动更新检查:Oh My Zsh默认会自动检查更新,但Github连接可能不是一直稳定,有时我们打开终端后急着用呢,Oh My Zsh却卡在自动更新上,非常烦人,编辑~/.zshrc添加配置DISABLE_AUTO_UPDATE="true"即可关闭自动更新检查。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。