linux学习我用 Linux不能删除的专题

改造你的 shell —— bash to zsh

2016-12-10  本文已影响1063人  e192c17748a7
图片来自网络

对于 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
上一篇 下一篇

猜你喜欢

热点阅读