我在公众号上重新发表了一次,这里我添加了动图,看起来更方便一些。

https://mp.weixin.qq.com/s?__biz=MzI0MzQ0MTE2Nw==&mid=2247483697&idx=1&sn=3fe98f1cbb554cd7a8a741d6000fc922&chksm=e96c4a51de1bc347532f0223990a39836725b659b1526940f0c17e2be4e6d208e8f8d006bfea&scene=0#rd


优点1:

完全兼容bash,之前bash下的使用习惯,shell脚本都可以完全兼容。


优点2:

更强大的tab补全,当你切换目录敲两下tab,他可以列出当前目录下面的所有目录,并且可以使用键盘上下左右键来选择要进入的目录。


wKiom1cUgGmhs7sOAAAh3Xd7UZg533.png



优点3:

更智能的切换目录,比如你要进入一个很深的目录,like this /var/log/nginx/error/lastyear/may/first/monday, 用zsh可以这样输入cd /v/l/n/e/l/m/f/m,然后按tab即可补全整个路径。或者你实现知道当前目录名称,可以直接输入目录,即可进去目录。bash下cd - 可以切换到刚才进入的目录,在zsh下可以记录最近进去过的10个目录,只需要输入d,然后看到对应的0-9的目录,输入cd -数字,即可进入对应的目录。或者直接输入cd -然他后TAB一下,你会发现有最近使用过的31个目录等候你选择。


wKioL1cUgSfDg4sUAAAjClJsyi4213.png


wKioL1cUinXwtepAAAAoRhlBg14007.png


wKioL1cVlmTBouD4AABXDlQubiU012.png


优点4:

命令选项补齐,比如输入yum,然后按tab,即可显示出yum都有哪些命令选项。


wKioL1cUgSigwyP4AABOp6DT8pE635.png


优点5:

命令参数补齐,比如要kill一个进程,直接输入kill 进程名,会自动显示出进程的process id,

如果用ssh,则会输出最近用ssh 连接过的主机名,配合.zshrc还可以实现自定义ping命令自动补齐的命令参数。

zstyle ':completion:*:ping:*' hosts 192.168.1.{1,50,51,100,101} www.google.com


wKiom1cUgGrxcQXjAAAqL2p02oY250.png


优点6:

大小写字母自动更正,比如我们要cat一下README.txt,直接输入cat readme.txt TAB,之后zsh就会把小写的readme改成大写的。这个功能很好用哦。



优点7:

有着丰富多彩的主题,如果你使用我的脚本安装oh-my-zsh的项目的话,在~/.oh-my-zsh/themes里会找到多达142个主题,看中哪个主题直接在~/.zshrc 里面更改:

ZSH_THEME="ys"

想要看其他的主题,可以看官网的这个地址:

https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes

或者知乎上的这个讨论地址:

https://www.zhihu.com/question/33277508

然后我用的是这个主题:


wKioL1cUgSiw0ycEAAAdRt7g_Ls590.png


优点8:

更强大的alias命令,比如下面命令,当你在zsh环境下输入hello.py即可直接用vim打开文件编辑,一个tgz的文件即可自动解压缩。

alias -s py=vim
alias -s html=vim
alias -s tgz='tar zxvf'


优点9:

智能命令错误纠正,比如输入apt-gte install somefile,回车后,zsh会提示你是否纠正apt-gte 为apt-get?输入y,后即是正确命令执行。在配合一下zshrc的profile的sudo命令设置,按两下ESC,即可在命令的前面自动加上sudo。


##在命令前插入 sudo {{{
#定义功能
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
zle end-of-line                 #光标移动到行末
}
zle -N sudo-command-line
#定义快捷键为: [Esc] [Esc]
bindkey "\e\e" sudo-command-line
#}}}


wKioL1cUgSfD48mxAAAsbZ1dM6U050.png


优点10:

最最强大的优点是可以集成各种类型的插件,比如切换目录的可以继承autojump,想跳转到哪里,直接j 加目录名称,真的非常强大,非常便利,这个bash也可以使用。比如想要去nginx目录,可以直接输入j nginx,他会搜索使用率最高的nginx的路径,如果想要去/var/log/下的nginx呢,直接输入j v ng,效果如下:

wKioL1cUgSjjDNTTAAAiBvyCs-g626.png


在比如git插件,当你在一个git 仓库的时候你的zsh PS1是这样显示的,


wKiom1cUggixsF0eAAAIXwyUgTI071.png

会面会跟git 是master 还是 branch,然后的o 表示当前没有modify,也是最新的,比如我们更改一个文件,立马变成如下:


wKiom1cUgm7hFuNoAAAI_w3rM9s063.png

后面的o变成了x,代表你的本地仓库有更新。

在比如说你在你的仓库里新添加了几个文件,当你使用git add的时候多按几次TAB,你的新添加的文件就都补上了。


还有一个比较厉害的插件是history-substring-search, 强大到令人发指,首先你输入的每条命令他会给你记录下时间,并且在你的home目录创建.zsh_history/相对应的目录,并记录你在当前目录下用过的命令。

比如输入ansible,按上下箭头,即可搜索之前使用过的包括ansible的命令,而且是完全匹配,怎么说呢,就是比如说输入“ansi” 他就会匹配命令当中包含“ansi”的,如果输入“ansible all” 他就会匹配完全包含“ansible all”的命令,强大的地方在于当你输入ansible 上箭头比如找到这条命令ansible all -m shell -a 'update',你可以左右光标符到m,然后上下翻命令,这时候搜索的就是"ansible all -"。也可以用histall | grep ansible的方式:

wKiom1cUhXegjuZrAADWK4vHGH8988.png


zsh还有很多强大的plugin值得去研究一下,比如集成docker的,aws的,go,python等等。还有大部分不习惯centos7的systemctl命令的,有个systemd的插件值得一用。

# root at shanker in ~/.oh-my-zsh/plugins/systemd on git:master o [7:17:36]
# less systemd.plugin.zsh 
user_commands=(
  list-units is-active status show help list-unit-files
  is-enabled list-jobs show-environment cat)
sudo_commands=(
  start stop reload restart try-restart isolate kill
  reset-failed enable disable reenable preset mask unmask
  link load cancel set-environment unset-environment
  edit)
for c in $user_commands; do; alias sc-$c="systemctl $c"; done
for c in $sudo_commands; do; alias sc-$c="sudo systemctl $c"; done
alias sc-enable-now="sc-enable --now"
alias sc-disable-now="sc-disable --now"
alias sc-mask-now="sc-mask --now"


如果大家觉得好用,可以用我写的自动化安装脚本,只支持centos like和ubuntu like系统哦。

https://github.com/sangrealest/shell/blob/master/init_zsh.sh

或者参考这篇文章:

http://shanker.blog.51cto.com/1189689/1737213



欢迎补充!