總結
zsh擁有成熟的生態,現代的語法,強大的功能,是目前shell的最好選擇。
我用shell做什麼
我是shell的重度用户,開發工作除了寫文檔都是在shell下完成的。所以shell就是我的生產力工具,打造高效的shell環境,可以大幅提高我的工作效率。有很多功能,比如文件打開關閉,文件目錄跳轉,初始化配置,eda工具設置,是不適合用其他腳本語言來寫的,shell腳本也是最佳選項。很多子功能適合編譯成二進制文件後,由shell來統一調用支配。
所以選擇shell非常關注它的生態以及生態裏已有的功能。生態不好,就需要自己造輪子,顯示不適合我這樣的IC開發者,所以我最選淘汰的是我們行業最常用的csh. 其次就是最好有成套的環境可以直接使用,這樣就不需要自己花大量時間去配置成方便使用的環境。這方面oh-my-zsh的存在極大減少了使用者的配置時間。拿來主義非常爽。內置非常多主題和插件,直接可以使用。
擔憂
在我們這個行業非常多人用csh,並且可能有些腳本是用csh寫的,覺得轉過來非常不方便,相當於別人已經有csh生態了,你一個人轉過來相當於拋棄了生態。
這在我看來完全不是問題,因為別人所謂的腳本如果是很嚴謹的腳本,一定不會依賴於SHELL的,如果依賴於SHELL,那麼腳本一定是比較隨意的,或者是source一些變量設定和路徑設定的,這種如果一定想重用,可以用工具自動轉成bash(這樣zsh也可以用了)。這種是一次性工作量。
相比zsh帶來的效率提升,這個代價很小。
小聲説一句,我其實並沒有用其他人的csh腳本,因為他們的腳本真的只是給自己用的一些變量設定和alias之類。我是用不上的。
下面我來一一介紹它的優點。
兼容性
zsh基本兼容bash, 所以絕大部分bash腳本可以直接使用。
細微的差別參見我的這篇文章
文件補全
只要按下tab鍵, 它可以根據前文命令列出文件或目錄。
如果是svn add, 它會只列出末添加到倉庫中的文件。
如果是cd, 它會只列出目錄。
便捷的目錄切換
可以用cd .....向上5層
可以用d回車列出最近5個目錄,然後用數字選擇進入哪個目錄
可以用cd /v/o/s/d來進入/var/opt/synopsys/doc目錄
命令選項補全
這是補全的一種,但它的強大值得再提一遍
它可以理念命令。比如
dconf <Tab>
會自動列出subcommand
$ dconf <Tab>
compile -- compile a binary database from keyfiles
dump -- dump an entire subpath to stdout
help -- display help information
list -- list the contents of a directory
load -- populate a subpath from stdin
read -- read the value of a key
reset -- reset the value of a key or directory
update -- update the system databases
watch -- watch a path for changes
write -- change the value of a key
命令參數補全
比如上面的命令輸完dconf read /按下<Tab>就會自動輸出org/和system兩個選項
$ dconf read /
org/ system/
再比如輸入kill vim後按下tab, 如果只有一個匹配項,會自動變成kill 5378,多個會如下:
歷史記錄
zsh的歷史記錄在多個terminal是共享,可以用向上箭頭來搜索,比如輸入make然後用向上鍵,它會依次列出以往以make開關的命令,這在實現工作中非常高效。
oh-my-zsh
150kStar、275+插件、140+主題、2000+貢獻者....., 從這組數字就知道這是多麼優秀的一個shell配套工具。
oh-my-zsh的存在極大簡化了zsh配置和使用的問題,相當於精裝房直接入住。
各種主題只要在配置文件裏寫一下就成功了, 各種插件只要在配置文件里加上就安裝成功了
這個我們不多講了,有興趣可以直接使用就好了。
附加插件
在https://github.com/zsh-users下有一些增強插件,都很命令,尤其推薦其中的zsh-autosuggestions, 它可以自動列出你以前輸入過的命令和選項
比如用上面的dconf命令為例
文件類型敏感的alias
比如配製如下:
alias -s tgz='tar -zxvf'
alias -s gz='tar -zxvf'
alias -s bz2='tar -jxvf'
alias -s zip='unzip'
alias -s v=vi
alias -s sv=vi
alias -s vhdl=vi
alias -s cpp=vi
在zsh下輸入test.sv會自動用vi打開,輸入test.tgz,會用tar -zxvf test.tgz執行