聽說有一個zsh shell framework叫oh-my-zsh超級好用的,它包括了一系列plugin與theme,於是就裝來試試,結果就回不去了。安裝的方式也很簡單,按照README的步驟安裝即可。
安裝完後,如果有用rvm,要記得將rvm的設定複製到.zshrc,如下所示:
PATH=$PATH:$HOME/.rvm/bin
[[ -s "$HOME/.rvm/scripts/rvm"]] && source "$HOME/.rvm/script/rvm"
使用shell最常做的動作的就是用cd切換目錄,在zsh中只輸入路徑按下[Enter],就相當於cd到輸入的目錄。
ex-app $ app/views/home[Enter]
ex-app/app/views/home $
通常要跳回上一層,我們會用cd ..
,跳回上兩層是cd ../..
,跳回上三層是cd ../../..
,可是..
打久了也是很煩人的。在zsh中,cd ../..
可以用cd ...
(..
後多一個.
),cd ../../..
可以用cd ....
(..
後多二個.
)。
任何需要路徑的地方都可以使用模糊搜尋,再按[Tab]自動補完完整的路徑。
$ vim a/vi/home/dex[Tab]
$ vim app/views/home/index.html.erb
另一個很常用的就是cd -
,但一般的shell只能跳回前一個路徑。在zsh中,輸入cd -
再按下[Tab],會列出前幾次的路徑,選擇對應的號碼就可以跳到對應的路徑。
$ cd app[Enter]
app $
app $ cd views/home[Enter]
app/views/home $
app/views/home $ cd -[Tab]
1 -- /app/
2 -- /
app/views/home $ cd -[2][Enter]
1 -- /app/
2 -- /
$
當要執行之前執行過的指令,我們通常用history
來查詢,再用!
加上歷史記錄代碼來執行。在zsh中,可以在!
後加上指令的關鍵字進行搜尋,再按[Enter]就會切換成之前的指令。
$ !mys[Enter]
$ mysql -uex_dev -pex_dev ex_dev[Up]
$ mysql -uex_test -pex_test ex_test
如果不是你想要的指令,可以再按[Up/Down]切到一下個符合搜尋的指令。
另一種是直接按[Ctrl]+[r],再輸入關鍵字搜尋。如果不是你想要的指令,可以再按[Ctrl]+[r]切到一下個符合搜尋的指令。
通常要kill一個process,我們都要先找出對應的PID,再用kill PID來砍掉它。在zsh中,可以直接在kill後面接process的名稱,再按[Tab]就會切換成對應的PID。
$ kill pow[Tab]
$ kill 33785
在zsh中,可以用*當做萬用字元將多個符合條件的檔案路徑一起找出來。
$ ls **/*user*[Tab]
$ ls app/models/user.rb db/migrate/20140104024658_create_users.rb spec/factories/users.rb spec/models/user_spec.rb app/controllers/users app/views/users
$ ls **/*user*[Enter]
app/models/user.rb
db/migrate/20140104024658_create_users.rb
spec/factories/users.rb
spec/models/user_spec.rb
app/controllers/users:
sessions_controller.rb
app/views/users:
sessions
mv的超級強化版,可以做到批次改名。
設定:zsh預設並沒有載入zmv這個module,必須下指令autoload -U zmv
才可以使用它。你可以將這段指令加到你的.zshrc
中。
最常用的方式是使用(*)
搭配$1
,$2
等變數,舉個例子,如果我們有下面三個檔案:
pic01-001.png
pic02-002.png
pic03-003.png
我們想將pic
換成fig
,-
換成_
,也就是改成下面的檔名
fig01_001.png
fig02_002.png
fig03_003.png
用zmv只要下面一行就搞定了,超簡單的吧。
zmv 'pic(*)-(*)' 'fig$1_$2'
另外如果只想看更改名稱的結果,但不要真的更改名稱,可以加上參數-n
。更多例子可以參考:zmv
oh-my-zsh的plugin只能說是繁族不及備載,大部分的plugin,例如:git與rails都會幫你內建快捷指令,節省很多打指令的時間。不過快捷鍵這種東西,不會用就是不會用,但會用就是覺得不能沒有它,所以還是要去了解才能會去用它。另一方面,如果常用git的人不會使用gc
來取代git commit
,gst
來取代git status
,這樣顯然還不夠專業啊。oh-my-zsh的plugin都放在plugin目錄之中。有興趣的話可以看看plugin的原始碼,也可以趁機學習一下怎麼寫出屬於自己的plugin。這裡我列出一些有趣的plugin。
要加入一個plugin很簡單,只要在.zshrc
中的plugin設定值中加入plugin的檔名即可,不過要記得重啟你的terminal。
Jump plugin最主要的功能就是在shell中加入路徑書籤。
mark 書籤名稱
將目前所在目錄加上書籤。unmark 書籤名稱
刪除書籤。marks
列出目前所有的書籤。jump 書籤名稱
跳至書籤對應的目錄。加了一些控制pow的快捷指令。
kapow
執行touch tmp/restart.txt
,也就是重啟pow server。powit
執行將app掛載到pow下執行。