shell之終極shell——zsh


快速了解Linux/Unix系統中最重要的概念——shell一文中,我們對shell進行了簡單的介紹。shell是Linux/Unix的一個外殼,它負責外界(用戶)與Linux內核的交互,接收用戶或其他應用程序的命令,然后把這些命令轉化成內核能理解的語言,傳給內核,內核是真正干活的,干完之后再把結果返回用戶或應用程序。

比如,用 ls 命令列舉當前目錄的文件,用 find 命令查找文件,用 cp 命令拷貝文件,用 top 命令查看機器負載和進程等。最常見的bash就是shell的一種,也是 Linux下的默認shell程序,這篇主要介紹當下最熱門的shell——zsh,相比bash,它更強大,也更人性化,俗稱終極shell。

什么是zsh?

 對於經常在Linux環境下干活的開發者來說,shell是我們使用最頻繁的程序了。而zsh屬於shell的一種,和bash 一樣,但比bash更好用,zsh完全兼容bash,擁有極其豐富的插件,其強大的自動補全參數、文件名以及自定義功能,可以大大提高我們使用Linux的效率

安裝zsh

Mac OS預裝了zsh,可跳過這一步;
Redhat Linux執行: sudo yum install zsh 
Ubuntu Linux執行: sudo apt-get install zsh 
Windows 請點右上角關閉。。。

安裝完成后設置當前用戶使用zsh: chsh -s /bin/zsh ,根據提示輸入當前用戶的密碼就可以了。

安裝oh-my-zsh

zsh雖然好用,但直接用起來還是比較麻煩,不過幸運的是,已經有大神給我們配置好了一個很棒的框架:oh-my-zsh(github),專門為zsh打造,一條命令搞定安裝:

sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

如果 wget 報錯,也可手動安裝(須先安裝git,方法同zsh,替換成git即可):

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

配置

zsh的配置主要集中在用戶當前目錄的 .zshrc 里,用 vim 或你喜歡的其他編輯器打開 .zshrc ,在最下面會發現這么一行字:

# Customize to your needs…

可以在此處定義自己的環境變量和別名,當然,oh my zsh在安裝時已經自動讀取當前的環境變量並進行了設置,你可以繼續追加其他環境變量。

主題

oh-my-zsh提供了很多主題,主題的配置文件在 ~/.zshrc 文件中可以看到,打開該文件,找到下面這行:

ZSH_THEME="robbyrussel"

這是默認主題,可以將值改為其它任意主題,oh-my-zsh的主題可以在這里找到。改好保存文件后,執行 source ~/.zshrc 使配置生效。當然,你也可以直接將值設置為”random”也是可以的,以后每次登陸服務器,oh-my-zsh會隨機選擇一個主題,總有一款適合你。

插件

oh my zsh項目提供了完善的插件體系,相關的文件在 ~/.oh-my-zsh/plugins 目錄下,默認提供了100多種,大家可以根據自己的實際學習和工作環境采用,想了解每個插件的功能,只要打開相關目錄下的zsh文件看一下就知道了。插件也是在 .zshrc 里配置,找到plugins關鍵字,你就可以加載自己的插件了,系統默認加載git,你可以在后面追加內容,如下:

plugins=(git zsh-syntax-highlighting zsh-autosuggestion autojump z)

優勢特色

命令提示

務必明確命令提示補全是兩個完全不同的系統!很多時候提示比補全更有用,例如:

你才輸入完 “tar”命令,后面就用灰色給你提示 tar 命令的參數,而且是隨着你動態輸入完每一個字母不斷修正變化:

比如你輸入到 - 后,沒有跟着它上面的提示,而是輸入了一個z字母,它馬上明白你是要解壓,不是壓縮,然后隨即給出你壓縮對應的命令提示。

這個命令提示是基於你的歷史命令數據庫進行分析的,隨着你輸入的命令越來越多,提示將會越來越准確和順手,某些不常輸入的命令特別管用,比如偶爾查看下網卡配置:

剛輸入完:cat /etc/n,它后面已經猜出你可能要查看網卡配置了,然后馬上給出你提示,用不着你TAB鍵補全半天。

如果你覺得它提示的正確,你可以CTRL+F表示采納,后面就會自動幫你一次性全部輸入完了,不用一個字一個字地照着敲。前面的高亮就不說了,用慣這套提示系統,你就再也難以回到光禿禿的bash時代了。

智能補全

縮寫路徑補全是zsh的一大特色,特別是路徑比較長的時候,比如Mac OS下工具鏈層層套的那種路徑,比如某java代碼樹,有了這種縮寫補全,能讓你切換路徑流暢不少:

當補全內容較多時,不用像bash一樣持續提示你需要繼續輸入,也不會像cmd永無止境的循環下去,連續敲擊兩次TAB鍵zsh給你一個補全目錄,讓你上下左右選擇:

這叫選擇模式,由兩次連續TAB進入,進入后,除了TAB/SHIFT+TAB可以前后切換外,你還可以使用光標鍵上下左右移動,或者使用emacs鍵位:CTRL + f/b/p/n (左右上下:forward, backward, previous, next) 。如果你覺得光標鍵太遠難按,CTRL+f/b/p/n太傷小拇指,也可以新定義一套,比如:ALT+hjkl(左下上右)來選擇,十分順手。回車表示確認選擇,用CTRL+G表示退出。

命令參數補全更不在話下,輸入tar后面按一次TAB:

不僅一級參數可以補全,更常用的是二級參數補全。這時候兩次TAB進入選擇模式就比較管用了,選擇完回車確認,或者CTRL+G退出選擇模式。

快速跳轉

cd -:切換至最近路徑

命令行工作中,不同的路徑間切來切去是個頭疼的問題,除了上面提到的縮寫補全外,也可以使用 cd - 切換到最近跳轉過的某個路徑

輸入cd后面加一個減號“-”后,按一次TAB馬上就列出本次登陸后去過的最近幾次路徑,接着根據下面的提示輸入數字按回車就過去了,比如輸入: $ cd -5 <回車> 就跳轉到~/.oh-my-zsh/plugins路徑下了。當然你還可以不輸入數字,而是再按一次tab進入選擇模式,上下鍵或者CTRL+n/p來選擇,回車確認,CTRL+G返回。

有了前面的路徑縮寫展開,和上面的最近訪問路徑切換,能否更進一步,不限於本次登陸或者最近去過的幾級路徑,而讓我快速進入自開始用zsh之后進入過的某個路徑呢?當然可以,我們使用 z 命令,查看歷史上進入過的目錄。

d:跳轉最近歷史目錄

 d 命令會列出我們最近進入的目錄歷史,並且會給這些目錄加上序號,只需要輸入對應目錄的序號,即可重新進入該目錄,如下圖所示:

其中序號為1的目錄是我的SU目錄,直接輸入1,立馬跳回到SU所在目錄。

下一節還會介紹兩種跳轉類插件z和autojump。

熱鍵綁定

zsh里面使用 bindkey 命令可以設置一系列熱鍵,用來運行某一個zsh內部命令或者某個shell命令。比如從網上下載了一個tar包解開后要稍微瀏覽一下里面的內容,用的最多的兩條命令是啥呢?第一條是 ls 命令,每到一個子目錄都要先按一下,還有就是 cd ..  對吧,經過配置:

bindkey -s '\eo'   'cd ..\n'    # 按下ALT+O 就執行 cd .. 命令
bindkey -s '\e;'   'ls -l\n'    # 按下 ALT+; 就執行 ls -l 命令

你還可以設置一鍵打開編輯器,或者一鍵幫你輸入某常用命令的一部分。除了這些命令外,日常命令編寫也可以加強一下:

bindkey '\e[1;3D' backward-word       # ALT+左鍵:向后跳一個單詞
bindkey '\e[1;3C' forward-word        # ALT+右鍵:前跳一個單詞
bindkey '\e[1;3A' beginning-of-line   # ALT+上鍵:跳到行首
bindkey '\e[1;3B' end-of-line         # ALT+下鍵:調到行尾

敲命令時經常需要對已有命令進行修改,默認一個字符一個字符的跳太慢了,這樣設置以后基於單詞的跳轉快速很多,配合其他一些快捷鍵,修改命令事半功倍。

還不會在自己的終端軟件里設置允許ALT鍵的同學們可以搜索下相關文章。

善用zsh的插件

介紹幾款熱門常用插件。

zsh-syntax-highlighting:色彩高亮

zsh-syntax-highlighting的主要作用時讓你在使用zsh的時候,shell命令可以高亮顯示,便捷的知道你輸入的命令是否正確。正確的命令會使用綠色渲染誤的命令會使用紅色警告


安裝

Mac OS:直接 brew install zsh-syntax-highlighting ,會自動下載這個插件,再 source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 刷新即可。

對於Oh-my-zsh用戶:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

然后激活這個插件,通過在 ~/.zshrc 中加入插件的名字:

plugins=([plugins...] zsh-syntax-highlighting)

最后當然是source一下,讓改變生效: source ~/.zshrc 。

zsh-autosuggestions:命令自動推薦

根據歷史輸入指令的記錄即時的提示,能夠很大的提高效率。

安裝

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

編輯~/.zshrc文件: plugins=(git zsh-autosuggestions) 

z:路徑跳轉魔術師

強大的目錄自動跳轉命令,會記憶你曾經進入過的目錄,用模糊匹配快速進入你想要的目錄。

可以查看歷史路徑及其權重,跳轉至匹配關鍵字的最高權重路徑:

1. 敲入 z 命令,會列出自開始用zsh進入過的目錄和它們的權重,進入次數越多,權重越大。

2. 使用 z [key] 直接跳轉到所有匹配關鍵字的歷史路徑中權重最高的那個。

3. 使用 z -l key 會列出包含關鍵詞的所有歷史路徑及其權重。關鍵詞可以有多個,使用空格間隔: z -l key1 [key2 ...] 。會先匹配第一個,再匹配第二個,直到最后鎖定。

大家實際使用起來,一般是z+最后一級目錄名,99%的時候這樣做就足夠了。當沒有按照你要求跳轉的時候,你可以再補充再上一級目錄的一些信息。實在弄不明白會跳轉到哪里,可以隨時用上述123的命令查看權重。

安裝

直接在 ~/.zshrc 中的插件那行添加z即可: plugins=(git z) 

autojump

zsh和autojump的組合形成了zsh下最強悍的插件,實現目錄間快速跳轉。想去哪個目錄直接 autojump dir_name一部分 ,不用再頻繁的cd了!

autojump有一個自帶的alias:j,因此簡單輸入 j dir 就可以轉到對應的目錄去。

對於權重數據庫的訪問

$ autojump -a [dir]
# 在數據庫中添加一個目錄

$ autojump -i [value]
# 提升當前目錄value數目的權重

$ autojump -d [value]
# 降低當前目錄的權重

$ autojump -s
# 顯示數據庫中的統計數據

$ autojump --purge
# 清除不再需要的目錄

安裝

如果你用Mac OS,可以直接brew安裝: brew install autojump 。如果是Linux: sudo apt install autojump 

修改配置文件: vim ~/.zshrc ,添加: plugins=(git autojump) 。另

# 使用brew安裝的
[[ -s $(brew --prefix)/etc/profile.d/autojump.sh ]] && . $(brew --prefix)/etc/profile.d/autojump.sh
source $ZSH/oh-my-zsh.sh

# 使用git安裝的
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh 

zsh-incr:自動補全插件

安裝

mkdir ~/.oh-my-zsh/plugins/incr
wget http://mimosa-pudica.net/src/incr-0.2.zsh -O ~/.oh-my-zsh/plugins/incr/incr.plugin.zsh

在.zshrc文件末尾添加: source ~/.oh-my-zsh/plugins/incr/incr*.zsh 

之后 $ source ~/.zshrc  更新配置即可。

(整理自網絡)

參考資料:

https://zhuanlan.zhihu.com/p/19556676

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM