【CLI】zsh调研(2)配置和使用
2015-02-09 本文已影响3381人
刘大帅
参考文章
复习一下zsh
- 拼写纠正。你总会不小心打错命令,这时,zsh会进行自动拼写纠正,如图:
zsh拼写纠正 但有时候自动纠正没有那么智能,如图
自动纠正失败 可以对这些命令使用alias加上
nocorrect
前缀,如:
alias rake deploy='nocorrect rake deploy'
- 更强大的补全。
- 连按两次Tab会列出所有的补全列表并直接开始选择。如图:
两次Tab补全 并且可以用方向键来选择,但是对我这种很少用方向键的人来说只能猛敲Tab了么,不是,zsh支持使用
<ctrl-n/p/f/b>
来选择,perfec! - 命令选项补全。有多少人依然记不住tar的命令选项?中枪的去抄20遍……在zsh中只需要键入
tar-<tab>
就会列出所有的选项和帮助说明。用了zsh之后man
少用了很多…… - 命令参数补全。zsh对命令的参数补全也很强大。键入
kill <tab>
就会列出所有的进程名和对应的进程号。如图命令参数补全1 这还不够,试试键入
kill sbin <tab>
,如图所示:命令参数补全2 自动为sbin这个进程名补全了进程号。kill进程再也不用两步操作了。
- 连按两次Tab会列出所有的补全列表并直接开始选择。如图:
- 更智能的历史命令。在用
<ctrl-p>
或者方向上键
查找历史命令时,zsh支持限制查找。比如,输入ls
,然后再按方向上键,则只会查找用过的ls命令。而此时使用<ctrl-p>
则会仍然按之前的方式查找,忽略ls
。 - 多个终端会话共享历史记录。经常有多个窗口,tab,tmux的的多个session,panel。这些命令历史不能共享实在是很糟糕的回忆。但是有了zsh之后,这些确实成了回忆,所有的命令历史可以共享。
- 更智能的
cd
。首先你甚至不需要再输入cd了,直接输入路径即可。第二,在你知道路径的情况下,比如/usr/local/bin
你可以输入cd /u/l/b
然后按<tab>
进行补全快速输入。这显然不够,zsh还支持路径替换,如果你其实想进入的是/usr/local/bin
(作者注:疑为/usr/local/share
),不再需要../
了,直接在当前输入cd bin share
即可,则bin
会替换为share
。在之后,我会介绍z和autojumper,目录跳转会更方便。 - 更强大的alias。zsh不仅支持普通的alias,例如:
alisa ls = 'ls --color=auto'
。zsh还支持后缀alias,即以什么命令打开特定的后缀名文件。例如alias -s js=mvim
,输入hello.js
,会以vim打开该文件,而不在需要vim hello.js
。 - 通配符搜索。这也是我最爱的功能之一。之前讲过由于命令补全少用了很多
man
命令,而这个功能让我少用了很多find
命令。一般的通配符搜索无非是ls -l *.log
,如图:一般通配符搜索 在zsh中可以做到递归的通配符搜索。使用
**/
来递归搜索,如图:zsh递归通配符搜索 是不是在很多场景下可以取代
find
?
配置zsh
目前流行的安装配置文件有2个.一个是官网的grml-zsh-config;另一个是oh-my-zsh.本文利用oh-my-zsh来配置。
curl -L http://install.ohmyz.sh | sh
* 通过[wget](http://)
```
wget --no-check-certificate http://install.ohmyz.sh -O - | sh
* 手动安装
```
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
安装完成之后退出当前会话,重新打开一个终端窗口,你就可以看到这个彩色的提示了:
* zsh 的配置主要集中在用户当前目录的.zshrc里,我们在安装oh-my-zsh后,已经对这个文件做了一定的配置,如图:

配置完之后,我们需要重启终端或打开新的标签,或者用以下命令:
source ~/.zshrc
很明显的,oh-my-zsh设置了一个默认主题(红框),我们可以在其[wiki](https://github.com/robbyrussell/oh-my-zsh/wiki/Themes)里挑选、学习更换主题。oh-my-zsh提供了数十种主题,相关文件在`~/.oh-my-zsh/themes`目录下,你可以随意选择,也可以编辑主题,满足自己的特定需求,我们也可以在.zshrc里将其设置为随机主题,这样每次启动都会随机选一个,直到你遇到了喜欢的,再确定下来:
ZSH_THEME="random"
* zsh插件。就像主题,oh-my-zsh提供了很多插件,不妨到`~/.oh-my-zsh/plugins`里看看都提供了什么插件,或者还是像在主题中一样,去其wiki里查看,如图
插件也是在.zshrc里配置,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git ,你可以在后面追加内容,如下:
```
plugins=(git textmate ruby autojump osx mvn gradle)
简单介绍几个插件
- git:当你处于一个 git 受控的目录下时,Shell 会明确显示 「git」和 branch,另外对 git 很多命令进行了简化,例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等,熟练使用可以大大减少 git 的命令长度,命令内容可以参考~/.oh-my-zsh/plugins/git/git.plugin.zsh
- textmate:mr可以创建 ruby 的框架项目,tm finename 可以用 textmate 打开指定文件。
- osx:tab 增强,quick-look filename 可以直接预览文件,man-preview grep 可以生成 grep手册 的pdf 版本等。
- autojump:zsh 和 autojump的组合形成了 zsh 下最强悍的插件,功能是可以方便自动匹配到你最多使用的目录并跳转(功能相似的还有z,z是shell脚本实现,autojump是Python实现),利用homebrew安装:
```
brew install autojump
确保你在.zshrc的plugins中已加入autojump,然后你就可以在你的历史记录中跳来跳去了。
