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