正如 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,
你只要:
- 按下
meta+b
把光标移动到 readme 前面 - 按下
meta+x
, 然后输入 up-case 再 tab, 就会补全 up-case-word 命令 - 敲下回车,你的 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』的称号。