优点1:完全兼容bash,之前bash下的使用习惯,shell脚本都可以完全兼容。
优点2:更强大的tab补全,当你切换目录敲两下tab,他可以列出当前目录下面的所有目录,并且可以使用键盘上下左右键来选择要进入的目录。
优点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 -数字,即可进入对应的目录。
优点4:命令选项补齐,比如输入yum,然后按tab,即可显示出yum都有哪些命令选项。
优点5:命令参数补齐,比如要kill一个进程,直接输入kill 进程名,会自动显示出进程的process id,
如果用ssh,则会输出最近用ssh 连接过的主机名,配合.zshrc还可以实现自定义ping命令自动补齐的命令参数。
zstyle ‘:completion:*:ping:*‘ hosts 192.168.1.{1,50,51,100,101} www.google.com
优点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
然后我用的是这个主题:
优点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的设置,按两下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 #}}}
优点10:
最最强大的优点是可以集成各种类型的插件,比如切换目录的可以继承autojump,想跳转到哪里,直接j 加目录名称,真的非常强大,非常便利,这个bash也可以使用。比如想要去nginx目录,可以直接输入j nginx,他会搜索使用率最高的nginx的路径,如果想要去/var/log/下的nginx呢,直接输入j v ng,效果如下:
在比如git插件,当你在一个git 仓库的时候你的zsh PS1是这样显示的,
会面会跟git 是master 还是 branch,然后的o 表示当前没有modify,也是最新的,比如我们更改一个文件,立马变成如下:
后面的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的方式:
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
欢迎补充!