終端下工做最煩躁的就是路徑切換,沒有自動路徑切換的幫助,就像在泥裏走路,因而你們發明了各類 autojump / z / fasd 等工具來提高路徑切換的效率,今天向你們介紹一個更好用的工具:z.lua,用熟練了之後就像終端裏溜冰,路勁切換今後指哪打哪。git
z.lua 是一個會學習你使用習慣的 cd
命令,它會跟蹤你在 shell 下訪問過的路徑,經過一套稱爲 Frecent 的機制(源自 Mozilla),通過一段簡短的學習以後,z.lua
會幫你跳轉到全部匹配正則關鍵字的路徑裏 Frecent 值最高的那條路徑去。github
正則將按順序進行匹配,"z foo bar" 能夠匹配到 /foo/bar ,可是不能匹配 /bar/foo。算法
$_ZL_ADD_ONCE
設成 1)。z.lua
文件完成全部工做。將下面對應語句添加到你的 .bashrc
/ .zshrc
/ .profile
或者對應 shell 的初始化腳本末尾:shell
eval "$(lua /path/to/z.lua --init bash enhanced once echo)" # BASH 初始化 eval "$(lua /path/to/z.lua --init zsh enhanced once echo)" # ZSH 初始化 eval "$(lua /path/to/z.lua --init posix enhanced once echo)" # 其餘 Posix Shell 初始化 source (lua /path/to/z.lua --init fish enhanced once echo | psub) # Fish Shell 初始化 iex ($(lua /path/to/z.lua --init powershell enhanced once echo) -join "`n") # Power Shell 初始化
而後從新登錄,便可使用。數據庫
「我喜歡它的原理,我在命令行下面的行爲十分有規律,而且我十分懶惰,懶得管理和維護一套書籤或者路徑別名。「vim
「總之,z.lua 作到了它所宣稱的目標。若是你須要快速的在目錄間切換,它多是最好的選擇。「bash
」我終於能夠在本身的樹莓派1上使用 autojump 相似的功能了,而不用像之前傳統 autojump 那樣每次打開終端都要等待 30 秒。」svn
cd 到一個包含 foo 的目錄:工具
z foo
cd 到一個以 foo 結尾的目錄:性能
z foo$
對長路徑使用多個關鍵字進行匹配:
假設路徑歷史數據庫(~/.zlua)中有兩條記錄:
10 /home/user/work/inbox
30 /home/user/mail/inbox
"z in" 將會跳轉到 /home/user/mail/inbox 由於它有更高的權重,同時你能夠傳遞更多參數給 z.lua 來更加精確的指明,如 "z w in" 則會讓你跳到 /home/user/work/inbox。
使用 -i 參數進行跳轉時, 若是有多個匹配結果,那麼 z.lua 會給你顯示一個列表:
$ z -i soft 3: 0.25 /home/data/software 2: 3.75 /home/skywind/tmp/comma/software 1: 21 /home/skywind/software > {光標位置}
而後你按照最前面的序號輸入你想要去的地方,好比輸入 3 就會進入 /home/data/software
。若是你不輸入任何東西直接按回車,那麼將會直接退出而不進行任何跳轉。
PS:交互選擇同時支持 "-I" 參數(大寫 i),讓你可使用 fzf 在多項結果進行快速選擇(若是系統裏面安裝了的話)。
"-b" 選項可快速回到某一級父目錄,避免重複輸入 "cd ../../..",通常把 "z -b" 別名成 "zb" 命令:
使用舉例:
# 一直向上退到項目根目錄(就是裏面有一個 .git 目錄的地方) ~/github/lorem/src/public$ zb => cd ~/github/lorem # cd 到第一個以 g 開頭的父目錄 ~/github/vimium/src/public$ zb g => cd ~/github # 快速回到 site 目錄 ~/github/demo/src/org/main/site/utils/file/reader/whatever$ zb si => cd ~/github/demo/src/org/main/site # 將 jekyll 替換爲 ghost ~/github/jekyll/test$ zb jekyll ghost => cd ~/github/ghost/test
向後跳轉一樣也支持環境變量 $_ZL_ECHO
(用來顯示跳轉結果),這樣爲搭配其餘工具提供了可能性(並不須要改變當前工做目錄),好比 ls $(zb)
:
Bonus:「zb ..」 至關於 「cd ..」,「zb ...」 至關於 「cd ../..」,而 「zb ....」 至關於 「cd ../../..」 等等。 最後 「zb ..20」 等同於調用 「cd ..」 二十次。
推薦一些經常使用別名,放在你的配置文件中:
alias zz='z -c' # 嚴格匹配當前路徑的子路徑 alias zi='z -i' # 使用交互式選擇模式 alias zf='z -I' # 使用 fzf 對多個結果進行選擇 alias zb='z -b' # 快速回到父目錄
z.lua 能夠方便的導入 z.sh 的數據(他們格式相同):
cat ~/.z >> ~/.zlua
還能夠導入 autojump 的數據:
FN="$HOME/.local/share/autojump/autojump.txt" awk -F '\t' '{print $2 "|" $1 "|" 0}' $FN >> ~/.zlua
更多內容,參考項目文檔。