在 CentOS 上配置 oh-my-zsh:Linux 终端解决方案

如果厌倦了 Linux 默认终端,而希望在操作上、视觉上都变得更加舒服一些,那便可以尝试一下 oh my zsh

以 CentOS 7 为演示操作系统。其他系统只会更简单,不会更复杂(Windows 除外)。

安装

oh my zsh 是基于 zsh 的。

这里,zsh 是一个终端,类似于我们日常使用的 bash。虽然好用,但是配置文件比较反人类,因此门槛比较高。

应运而生的就是 oh my zsh,它以框架的形式为 zsh 提供了配置上的便利之处。

因此,使用 oh my zsh,首先要保证系统中已经安装了 zsh。通过以下指令可以检查:

zsh --version

根据官方文档,如果输出了版本号并且大于 v4.3.9 那便可以直接安装 oh my zsh。

$ zsh --version
zsh 5.0.2 (x86_64-redhat-linux-gnu)

安装 zsh

如果不存在 zsh 命令,或者版本号过低,则执行下述指令安装:

sudo yum update && sudo yum -y install zsh

按提示输入当前用户的密码即可。

安装 oh my zsh

在任意终端中执行下述指令安装 oh my zsh:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

安装过程非常快。如果卡住时间过久,使用下述指令可以简单设置代理:

export ALL_PROXY=127.0.0.1:1080

正常情况下,一分钟内便可看到成功的字符画。

配置

成功安装后,oh my zsh 会替换默认的 ~/.zshrc 文件,并新建一个 ~/.oh-my-zsh 文件夹。

如何修改配置

修改一项配置时,一般直接修改 .zshrc 文件,如果引入了外置的主题、扩展等内容,则将其放入 .oh-my-zsh 相应路径。

修改时可以使用下述指令编辑文档:

vi ~/.zshrc

可配置项

值得修改的配置包括:

  • ZSH_THEME 修改主题
    • ZSH_THEME_RANDOM_CANDIDATES 当主题设为 random 时,这里可以配置需要随机的范围,如果不设,那么就在所有主题中随机
  • plugins 修改扩展
  • DISABLE_AUTO_UPDATE 关闭自动更新
    • UPDATE_ZSH_DAYS 自动更新间隔天
  • CASE_SENSITIVE 自动填充的时候大小写敏感
  • HYPHEN_INSENSITIVE 自动填充的时候 _- 可以互相匹配
  • DISABLE_UNTRACKED_FILES_DIRTY 如果是带 git 状态的主题,则可以选择是否要把 untracked 文件标记为 dirty,当目录很大时可以加快加载速度
  • ENABLE_CORRECTION 自动更正拼写错误的命令,拼写错误时会提示你接近的命令
  • COMPLETION_WAITING_DOTS 自动补全载入的时候会出现一串红点,当补全较慢时效果较好

扩展

通用的扩展

可访问扩展列表的页面,根据自己使用的喜好选择所需的扩展。

  • colored-man-pages 为 man 页面加上颜色,方便阅读
  • common-aliases 命令别名扩充,并额外为 rm 等指令增加交互式的确认提示
  • dircycle 使用「Ctrl+Shift+左右键」来快速跳转最近访问的目录
  • dirhistory 使用「Alt+左右键」来快速跳转最近访问的目录,这方面效率不如 dircycle,且 dircycle 在当前提示符下修改,而 dirhistory 会新建一行提示符;不过,dirhistory 另外支持「Alt+上下键」快速跳转父子目录
  • dirpersist 跨终端记录目录访问历史,也可用于重启终端后快速跳回之前的路径
  • extract 使用 x 别名可以方便地解压缩任意压缩文件,加上 -r 参数同时移除原压缩包
  • last-working-dir 能够在每次打开新的终端时自动跳转到上次关闭终端时所处的目录,也可以使用 lwd 命令跳转
  • per-directory-history 为每个文件夹单独保存命令历史,按下「Ctrl+g」可以在全局历史和当前文件夹历史之间切换
  • sudo 按两下 ESC 可以自动填充 sudo 到当前命令的最前端
  • yum 一些 yum 的别名
  • z 能够记录每次访问的目录,并通过 z 命令快速跳转,非常简洁,足以替代 autojump

针对语言的扩展

根据自己使用的编程环境,选择适当的扩展。可以参考官方的整理

  • docker
  • git 添加了许多命令别名,以及加了几个不大用得上的命令
  • git-extras 更多的 git 相关别名
  • npm
  • nvm

需要额外安装的扩展

  • zsh-autosuggestions 根据命令历史,提供灰色的候选,按向右键即可选择
    安装方法:

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

    更好的显示效果,可以执行一次:

    echo "export TERM=xterm-256color" >> ~/.zshrc
  • zsh-syntax-highlighting 根据实时的输入,提供一些额外的配色和格式,有些主题下会显得太花
    安装方法:

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

主题

所有主题在官方分成两类,内置的不内置的

推荐三款。我不喜欢太复杂,也不喜欢有图形符号。

mortalscumbag - 会显示 ssh 状态,可配给远程终端,避免混淆
ys - 很简单,分两行显示
garyblessington - 同样很简单,单行提示符

都是内置主题,直接改 ZSH_THEME 的值即可。