强大的 shell - zsh

作者: 编程青年 | 来源:发表于2016-02-11 07:51 被阅读1107次

    正如 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 基本一致,只要把 bashrcbash_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』的称号。

    相关文章

      网友评论

        本文标题:强大的 shell - zsh

        本文链接:https://www.haomeiwen.com/subject/ovqukttx.html