使用zsh的十大優點

我在公衆號上重新發表了一次,這裏我添加了動圖,看起來更方便一些。

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



歡迎補充!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章