像大部分 *nix 用戶,我以前用 bash 不少年,期間也有太小的不爽,但一直都忍過來,或者是說沒想過這些不爽的地方能解決,好比 cd
到一個深目錄時得哐哐猛敲 <TAB>
。這麼多年裏我也嘗試過其餘 shell。好比 ksh/tcsh 以及今天要說的 zsh,但最終都沒堅持下去,由於心中始終仍是認爲 bash 是最正統的 shell。直到前幾天發現 oh-my-zsh,下來試用了一把,頓時以爲 bash 各類操做不爽到沒法忍受。git
兼容 bash 意味着我不須要太多學習成本就能夠切換過來,意味着我之前在 bash 下積累的 shell 語法、基本操做都不會荒廢。在我內心 bash 仍是最通用和標準的 shell 環境,所以兼容 bash 讓我切換到 zsh 時沒有太多後顧之憂。程序員
zsh 中按兩下 tab 鍵能夠觸發 zsh 的補全,全部待補全項均可以經過鍵盤方向鍵或者 <Ctrl-n/p/f/b>
來選擇。github
zsh 除了支持目錄的補全,還支持命令選項的補全,例如 ls -<TAB><TAB>
會直接列出全部 ls
的參數,不再會出現一個命令打到一半,忘記參數致使重開一個 terminal man
一把。web
之前想 kill
掉一個進程,個人作法是 ps aux | grep "進程名"
而後記下 id,再 kill id
。在 zsh
下,只須要 kill 進程名<TAB>
,zsh
就會自動補全進程的 pid。shell
其他我經常使用的補全還有:tomcat
ssh <TAB><TAB>
時 zsh 會自動列出你訪問過的主機和用戶名來補全 ssh
的參數。brew install <TAB><TAB>
來補全軟件包名,除了 homebrew 之外,一樣支持 port/apt-get 等其餘包管理器。之前好比想進入一個比較深的目錄,好比 /Users/pw/workspace/project/src/main/webapps/static/js
,就得在 bash 下面打半天,不停的 tab 去補全一個正確的路徑出來。在 zsh 下,只須要輸入每一個路徑的頭字母而後 tab 一下: cd /u/p/w/p/s/m/w/s/j<TAB>
bash
之前最苦逼的事情莫過於頻繁在兩個工做目錄下切換,總要打一長串 cd
路徑。也嘗試過 popd
和 pushd
來解決這個問題,但每每是目錄已經切換了纔想起來沒用 pushd
。而 zsh 會記住你每一次切換的路徑,而後經過 1
來切換到你上一次訪問的路徑,2
切換到上上次……一直到 9
,還能夠經過 d
查看目錄訪問歷史。app
zsh 還能夠配合 autojump 一塊兒使用,autojump 會記錄下每個你訪問過的目錄,而後經過 j
來快速跳轉。less
bash 的 alias
只能作命令的縮寫,而 zsh
更進一步,使 alias
能夠縮寫命令的一部分,例如參數或環境變量設置。ssh
1 2 3 4 |
$ alias -s log=less
$ ~/package/tomcat/log/catalina.log # 至關於 less ~/package/tomcat/log/catalina.log $ alias -g PR=http_proxy=127.0.0.1:8087 $ PR curl https://twitter.com # 至關於 http_proxy=127.0.0.1:8087 curl https://twitter.com |
bash 下經過設置 $PS1
已經能夠實現很豐富的提示符了,而 zsh 更進一步,能夠實現諸如多行提示符、提示符右對齊等功能。oh-my-zsh
配置文件中提供了很是豐富的提示符 theme 供選擇,我使用的是 gentoo
主題,比較簡潔,還能夠顯示當前 git 倉庫的狀態。
例如修改 PATH
,bash 下設置 $PATH
要求全部路徑都要寫在一行裏,目錄多了之後看起來就很難看。zsh 支持更加符合程序員審美觀的設置方式。
1 2 3 4 5 |
path=(
~/bin
$path
~/package/smartsprites/bin
)
|
Linux 用戶經過各自發行版的包管理器直接安裝便可。
Mac 自帶一個 4.x.x 版本的 zsh,能夠直接使用,也能夠經過 homebrew 安裝最近剛剛發佈的 5.0.0 版本。推薦使用最新的 5.0 版本,對多字節字符提供了完整的支持,這一點對於國內用戶來講很重要。
經過命令 chsh
修改默認登陸 shell,須要注意的是,若是經過 homebrew 安裝了最新版本的 zsh,則須要 sudo
編輯 /etc/shells
加入一行 /usr/local/bin/zsh
。而後再經過 chsh
來修改默認 shell,不然會提示 /usr/local/bin/zsh
不是合法的 shell。
對於每個像我這樣的 zsh 初級用戶來講,oh-my-zsh 就是救人於水火中的大殺器,強烈建議使用此配置上手 zsh。
做者提供了傻瓜安裝命令:
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
幫助快速目錄跳轉的小工具。首先要安裝 autojump,而後在 .zshrc
中開啓 autojump 插件。它會記錄下來每一個你進入過的目錄,隨後經過 j 目錄名稱的一部分
就可快速跳轉到該目錄。
Git 命令補全,除了能夠補全 git 的子命令、命令開關等常規補全項之外,還能夠補全分支名等內容,用 git 必開的插件。
提供一些與 Mac OSX 系統交互的命令,好比:
man-preview git