改造你的 shell —— bash to zsh

作者: e192c17748a7 | 来源:发表于2016-12-10 18:27 被阅读1063次
    图片来自网络

    对于 Linux 使用者而言,一个优秀的 Shell 就像一把好枪对于士兵的重要性一样,它能通过节约你时间的方式,“拯救”你的生命。

    MacTalk 君曾在他的博文 【终极 Shell】中详细介绍了 Linux 下最优秀的Shell —— zsh 的安装和基本配置方法,按照文中的指示一步步操作,就可以完成从 bash 到 zsh 的平滑转换,开启 Linux 下最强大 Shell 的使用之旅。

    但是美中不足的是,MacTalk 君在他的博文中引用的 zsh 配置框架是经典的 oh-my-zsh。经典固然经典,但是它的启动速度真的很慢。网上有人做了不同 zsh 配置框架的启动速度对比试验,如下图所示:

    zsh 配置框架启动时间的对比

    从对比图中,我们可以看到有一个速度远超同侪的 zsh 配置框架,它就是本文将要介绍的 zim,一个专注于优化速度的 zsh 配置框架。

    本文所有操作,均在 Ubuntu-16.04.1-lts 下经过测试和验证。

    安装 zsh


    # 安装 zsh
    sudo apt-get install -y zsh
    
    # 设置当前用户使用 zsh,根据提示输入当前用户的密码即可
    chsh -s /bin/zsh
    

    安装 zim


    # 如果安装过git,可以跳过这一步
    sudo apt-get install -y git
    
    # 下载 zim
    git clone --recursive https://github.com/Eriner/zim.git ${ZDOTDIR:-${HOME}}/.zim
    
    # 配置 zim
    cd ~
    for f in .zim/templates/*; do cp $f .$(basename $f); done;
    
    # 执行初始化配置
    zsh
    source .zlogin
    

    完成以上步骤后,退出并重新打开 shell,zim 已经配置好强大的 zsh,等待你的使用。

    zim 启动界面

    升级维护 zim


    zim 本身并不能让你的 zsh 变得更强大,增强 zsh 的是 zim 所集成的各种插件:completions / history-substring-search / liquidpromptsyntax-highlightin

    为了能第一时间获得最新的插件功能,zim 提供了方便的自动升级命令,建议定期执行:

    # 自动更新 zim 插件
    zmanage update
    

    安装 fasd


    zim 默认集成了许多强大的插件,能够让我们的 zsh 使用变得无比便利。但是,zim 偏偏没有集成一个目录自动跳转插件,那个能够把我们从令人沮丧的“cd ls cd ls cd ls ……”中解救出来的终极武器。

    我只能认为 zim 的作者希望使用者自己,从 autojump / z / fasd 这三大神器中,选择最适合自己的那一个插件。

    大名鼎鼎的 autojump,因为它的快捷命令是 j,所以大家也都习惯性地称其为 j。autojump 使用 Python 编写,对于 Bash 和 Shell 的支持都比较好。但是可能是因为是 Python 写的吧,有的时候会感觉反应有些慢。

    z 的介绍就是"更好的j"。它的功能和 autojump 基本是相同的,不过它使用 Shell 脚本编写,更加简洁,基本上不会拖慢终端的响应速度。截止到2016年底,z 在Github上已经得到了6000+的star,超越了它的前辈 autojump 4800+的 star。

    然后人们还不满足,于是又有了大杀器 fasdfasd 不光会记录目录,还会记录文件,也就是说它可以做到快捷打开某个深层目录的文件。fasd 还可以通过配置,实现更加高级的功能。fasd 与 zsh的结合也非常好,可以使用 tab 灵活的在几个目录中选择。可能是由于 fasd 太强大了,虽然它使用 Shell 脚本写的,但是在使用的时候还是会感觉拖慢了终端的速度,特别是在执行 ls -l 的时候,会感觉输出明显慢了一拍。

    个人推荐,功能最强大的 fasd 最值得拥有。

    cd /tmp
    
    # 下载
    wget https://github.com/clvv/fasd/archive/1.0.1.tar.gz
    
    # 解压缩
    tar xf 1.0.1.tar.gz
    cd fasd-1.0.1
    
    # 执行安装
    sudo make install
    

    配置 zim 和 fasd


    执行 vi ~/.zshrc

    #
    # User configuration sourced by interactive shells
    #
    
    # Source zim
    if [[ -s ${ZDOTDIR:-${HOME}}/.zim/init.zsh ]]; then
      source ${ZDOTDIR:-${HOME}}/.zim/init.zsh
    fi
    
    # 设置解压缩别名
    alias -s gz='tar -xzvf'
    alias -s tgz='tar -xzvf'
    alias -s zip='unzip'
    alias -s bz2='tar -xjvf'
    
    # fasd
    eval "$(fasd --init auto)"
    alias a='fasd -a' # any
    alias s='fasd -si' # show / search / select
    alias d='fasd -d' # directory
    alias f='fasd -f' # file
    alias sd='fasd -sid' # interactive directory selection
    alias sf='fasd -sif' # interactive file selection
    alias z='fasd_cd -d' # cd, same functionality as j in autojump
    alias zz='fasd_cd -d -i' # cd with interactive selection
    

    使用 zsh


    1. 强大的历史纪录功能:输入 grep 然后用上下箭头可以翻阅你执行的所有 grep 命令。
    2. 语法高亮:输入正确的命令是绿色的✅,输入错误的命令是红色的❌,正确、错误一目了然。
    3. 各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下 tab 键。
    4. 在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。
    5. 智能跳转:fasd 会记录你对目录的访问历史,通过 z foo,能够自动跳转到曾经访问过的 foo 目录;输入 zz foo,以交互模式,跳转到匹配 foo 的所有访问历史。
    6. 文件、目录访问历史:f bar 用关键字 bar 匹配文件访问历史记录。d foo 用关键字 foo 匹配目录访问记录。
    7. 命令历史搜索:使用 Ctrl+r,输入命令关键字,查找并执行历史命令。如果查找返回的第一个结果不是你所期望的,继续按 Ctrl+r 向上翻阅查找。

    ......

    zsh 提升你的效率,节省你的时间,绝对是一项物超所值的技能投资。


    参考资料

    1. http://macshuo.com/?p=676
    2. https://skyline75489.github.io/post/2014-12-13_j-z-and-fasd.html

    相关文章

      网友评论

      本文标题:改造你的 shell —— bash to zsh

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