强大的 shell - zsh

正如 ruby on rails 之于 ruby,oh-my-zsh 这款插件把 zsh 这个 shell 带进了我们的视线。 和 ruby 的遭遇类似,如果不是 oh-my-zsh 的爆红,我可能也不会知道世界上还有 zsh 这个东西。 和 ruby 一样,虽然以前比较小众,但并不影响它的强大。本文就要用 ruby off rails 的风格来介绍一下原生的 zsh。

安装

brew install zsh
apt-get install zsh

记得装好后要设置 zsh 为默认 shell。

chsh -s $(which zsh)

不少同学装完 oh-my-zsh 之后发现 shell 的样子和功能没任何变化,估计是根本不知道 oh-my-zsh 是一款 zsh 的插件。因此需要你启动了 zsh 才能生效的。

配置文件方面不多说了,和 bash 基本一致,只要把 bashrc=,=bash_login 之类的文件改成对应的 zshrc, zsh_login 就行了。

配置

前面说了,本文讨论的是原生的 zsh,你可能觉得离开了 oh-my-zsh 这样的一站式(小白)的强大插件就像 ruby 没有了 rails 就不能开发大型 web 应用一样。

别怕,跟着我做,你立刻就会变得有自信了。

echo "autoload -U promptinit" > ~/.zshrc

然后新建一个 shell tab,输入 promptinit=,接着再输入 =prompt -p.

怎么样,这些主题够漂亮吧,挑一个喜欢的主题的名字,输入 prompt THEME_NAME 就可以应用主题了。

想要永久生效,写入下面的配置到 .zshrc 就行了:

autoload -U promptinit
promptinit
prompt adam2

当然你可以在主题的基础上进行修改,比如修改 PS1 的值等等,这些和其他 shell 都是类似的,就不介绍了。

这样一来是不是觉得要实现 oh-my-zsh 那样的效果也不难了。

line editor

zsh 的 line editor (简称ZLE) 与 bash 是不同的,后者依赖的是 readline, 而 ZLE 是 zsh 自带的模块。

ZLE 默认的按键绑定是 emacs 风格的(此处应有掌声)。你以为所谓的按键绑定仅仅是移动,kill,yank 等常见特性吗?

图样, 试试按下你的 =meta+x=,怎么样,没想到吧,ZLE 是支持 emacs 的 execute 的。

举个例子:你要为你的新项目写一个 README 文件,于是你输入 =touch readme=,这时你发现需要大写 readme, 你只要:

  1. 按下 meta+b 把光标移动到 readme 前面
  2. 按下 meta+x, 然后输入 up-case 再 tab, 就会补全 up-case-word 命令
  3. 敲下回车,你的 readme 就变成 README 了

ZLE 还有很多特性,比如按下 meta+enter 就能实现传统 \\ 表示的折行功能等。

自动补全

没有谁在敲 shell 命令的时候是一个一个字老老实实敲下来的吧,没有补全的 shell 没人会去用的。

zsh 的自动补全功能是非常强大的,想要启用的,类似于上面提到的提示符设置,写入下面的配置到 .zshrc 就行了:

autoload -U compinit
compinit

zsh 可以补全文件,变量,参数等。

插件管理

我觉得直接用 oh-my-zsh 有点太重 (小白)了,这里我推荐 antigen

Antigen is to zsh, what Vundle is to vim.

使用 antigen 可以轻松的管理各类 zsh 插件,包括 oh-my-zsh。

总结

可以看到,zsh 只需几行配置,就比 bash 要强上不少。不愧为 『终极 shell』的称号。