Zsh 及其配置#

  • 本节贡献者: 田冬冬(作者)、姚家园(作者)

  • 最近更新日期: 2021-01-21

  • 预计阅读时间: 20 分钟


Linux 下有很多 Shell,最常见的是 Bash,此外还有 Zsh、csh、ksh。推荐使用 Zsh。

Zsh 有如下特点:

  • 语法基本完全兼容于 Bash,一般用户完全体会不到其区别

  • Zsh 提供命令补全特性,比 Bash 的补全要更好用

  • 可配置性强

安装 Zsh#

在终端键入 zsh --version,若显示 Zsh 版本号,则表示 Zsh 已安装。否则需要安装 Zsh。

自 macOS Catalina(10.15)开始,macOS 系统默认的 Shell 已由 Bash 变为 Zsh。

Linux 用户可以使用如下命令安装 Zsh:

$ sudo dnf install zsh
$ sudo yum install zsh
$ sudo apt install zsh

通过如下命令设置默认 Shell 为 Zsh:

$ chsh -s $(which zsh)

chsh 命令修改的是登陆 Shell,因而需要退出当前用户并重新登陆, 用户的默认 Shell 就从 Bash 变成 Zsh 了。打开新的终端并键入 echo $SHELL,查看当前 Shell,会显示 /bin/zsh

chsh: command not found 错误

若出现 chsh: command not found 错误,则需要安装 util-linux-user:

$ sudo dnf install util-linux-user
$ sudo yum install util-linux-user

Zsh 的配置文件为 ~/.zshrc。因而切换到 Zsh 后, 所有的 Shell 配置都不用写到 ~/.bashrc,而要写到 ~/.zshrc 中。

Oh My Zsh#

Zsh 稍作配置会更加方便好用。Oh My Zsh 是由 Oh My Zsh 社区 维护的一套 Zsh 配置文件,使用起来非常方便。一般用户直接使用该配置即可。

安装 Oh My Zsh:

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

该命令会创建 ~/.oh-my-zsh 目录,下载 Oh My Zsh 到该目录下,生成默认的 Zsh 配置文件 ~/.zshrc,并备份老的配置到类似 ~/.zshrc.pre-oh-my-zsh 的文件中。

Note

GitHub 在国内访问不畅,以上安装命令可能会由于网络问题而失败。若以上命令失败, 可直接打开脚本链接 https://github.com/ohmyzsh/ohmyzsh/blob/master/tools/install.sh, 复制脚本内容到文本编辑器中(如 Visual Studio Code),保存到本地某目录下 (如 ~/Downloads 目录)。然后进入该目录,运行脚本即可:

$ cd ~/Downloads
$ sh install.sh

之后可以根据个人习惯修改配置文件 ~/.zshrc,如设置主题启用插件 等。

设置主题#

修改配置文件 ~/.zshrc 中的变量 ZSH_THEME 即可使用不同的主题。例如, 可以设置:

ZSH_THEME="bira"

打开新的终端即可查看主题效果。

Oh My Zsh 自带了很多主题,位于 ~/.oh-my-zsh/themes 目录下,可以在线预览主题效果。 用户也可以使用外部主题

启用插件#

直接修改配置文件 ~/.zshrc 中的变量 plugins 便可启用插件:

plugins=(
  sudo
  extract
  autojump
  zsh-autosuggestions
  zsh-syntax-highlighting
)

Oh My Zsh 自带了很多插件,位于 ~/.oh-my-zsh/plugins 目录下,也可以在线查询。 这里推荐几个常用的自带插件。

  • sudo 插件: 按两下 ESC 即可在当前命令前加上 sudo

  • extract 插件: 使用 x abc.zip 语法即可解压几乎所有压缩文件,如 .tar.gz.tar.bz2.zip.7z.rar

  • autojump 插件: 非常智能的目录快速切换工具

    $ pwd
    /home/seismo-learn
    $ cd Desktop
    $ cd /opt
    $ cd /usr/local
    
    # 用 j 命令迅速从 /usr/local 跳转到与 des 匹配的目录,这里只有 Desktop 可以匹配
    $ j des
    $ pwd
    /home/seismo-learn/Desktop
    

    启用 autojump 插件前,需提前安装 autojump:

    $ sudo dnf install autojump-zsh
    
    $ sudo yum install autojump-zsh
    
    # 安装后,还要根据 /usr/share/doc/autojump/README.Debian 里的要求做进一步设置
    $ sudo apt install autojump
    
    $ brew install autojump
    

除了 Oh My Zsh 自带的插件,还可以使用第三方插件,只需提前安装即可。这里推荐几个常用的。

  • zsh-autosuggestions 插件: 命令自动补全插件,当输入命令的几个字母,它会自动根据历史输入进行自动补全

    $ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
    
  • zsh-syntax-highlighting 插件: 高亮 Zsh 可用命令

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

    该插件需要位于配置文件 ~/.zshrc 中的插件列表的最后一位:

    plugins=([plugins...] zsh-syntax-highlighting)
    

    Note

    某些主题下,一些插件可能无法正常使用。

从 Bash 迁移到 Zsh#

Linux 下通常使用 Bash 作为默认 Shell,因而很多软件的配置信息都会写在 Bash 配置文件 ~/.bashrc 中。将默认 Shell 切换到 Zsh 后,还需要将 Bash 配置文件中的软件配置迁移到 Zsh 中。

由于 Zsh 兼容 Bash 语法,对于大多数软件的配置,都可以直接从 ~/.bashrc 复制粘贴到 ~/.zshrc 中。

对于 Anaconda/Miniconda 用户,需要在 Bash 环境中重新执行 conda 初始化设置,即:

# 进入 bash 环境
$ bash
# 在 bash 环境下执行 conda 初始化
$ conda init zsh
# 返回 zsh 环境
$ exit