別讓 cd 浪費你的時間

終端下工作最煩躁的就是路徑切換壤蚜,每天不停的 cd掺栅,就像在泥里走路砸喻,今天給大家介紹一個好用的工具:z.lua ,用熟后路徑切換就像是終端里溜冰撬即。

z.lua 是一個會學(xué)習(xí)你使用習(xí)慣的 cd 命令花沉,它會跟蹤你在 shell 下訪問過的路徑坟比,通過一套稱為 Frecent 的機制(源自 Mozilla)本姥,經(jīng)過一段簡短的學(xué)習(xí)之后,z.lua 會幫你跳轉(zhuǎn)到所有匹配正則關(guān)鍵字的路徑里 Frecent 值最高的那條路徑去焦辅。

正則將按順序進行匹配博杖,"z foo bar" 可以匹配到 /foo/bar ,但是不能匹配 /bar/foo筷登。

特性說明:

  • 性能比 z.sh 快三倍剃根,比 fasd / autojump 快十倍以上。
  • 支持 Posix Shellbash, zsh, sh, ash, ksh, busybox 等等前方。
  • 支持 Fish Shell狈醉,Power ShellWindows cmd
  • 增強匹配算法惠险,更準確的帶你去到你想去的地方苗傅。
  • 交互選擇模式,如有多個匹配結(jié)果班巩,cd 前允許你進行選擇渣慕。
  • 支持 fzf (可選)進行可視化結(jié)果篩選或者補全。
  • 快速回到父目錄抱慌,代替反復(fù) “cd ../../.." 逊桦。
  • 高性能,地占用抑进,為不同 Shell 提供統(tǒng)一的使用體驗强经。
  • 兼容 lua 5.1, 5.2 和 5.3 以上版本,兼容 LuaJit寺渗。
  • 自包含且無額外依賴匿情,單個 z.lua 文件完成所有工作兰迫。

軟件安裝:

將下面對應(yīng)語句添加到你的 .bashrc / .zshrc 或者對應(yīng) shell 的 rc 腳本末尾:

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 初始化

然后重新登陸,即可使用码秉。

基本使用:

cd 到一個包含 foo 的目錄:

z foo

cd 到一個以 foo 結(jié)尾的目錄:

z foo$

對長路徑使用多個關(guān)鍵字進行匹配:
假設(shè)路徑歷史數(shù)據(jù)庫(~/.zlua)中有兩條記錄:

10   /home/user/work/inbox
30   /home/user/mail/inbox

"z in" 將會跳轉(zhuǎn)到 /home/user/mail/inbox 因為它有更高的權(quán)重,同時你可以傳遞更多參數(shù)給 z.lua 來更加精確的指明鸡号,如 "z w in" 則會讓你跳到 /home/user/work/inbox转砖。

交互選擇:

使用 -i 參數(shù)進行跳轉(zhuǎn)時, 如果有多個匹配結(jié)果,那么 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府蔗。如果你不輸入任何東西直接按回車,那么將會直接退出而不進行任何跳轉(zhuǎn)汞窗。

PS:交互選擇同時支持 "-I" 參數(shù)(大寫 i)姓赤,讓你可以使用 fzf 在多項結(jié)果進行快速選擇(如果系統(tǒng)里面安裝了的話)。

快速回到父目錄:

-b 選項可快速回到父目錄仲吏,避免重復(fù)輸入 cd ../../..不铆,先把 z -b 別名成 zb

  • (沒有參數(shù)):cd 到項目根目錄,即跳轉(zhuǎn)到父目錄中包含 (.git/.svn/.hg) 的地方裹唆。
  • (單個參數(shù)):cd 到最近一級以關(guān)鍵字開頭的父目錄中誓斥。
  • (兩個參數(shù)):對當前目錄進行字符串替換,然后 cd 過去许帐。

使用舉例:

# 一直向上退到項目根目錄(就是里面有一個 .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

打開環(huán)境變量 $_ZL_ECHO(用來顯示跳轉(zhuǎn)結(jié)果)后劳坑,可以搭配其他工具,在目標目錄內(nèi)執(zhí)行命令成畦,而并不需要改變當前工作目錄(比如:ls `zb git`)距芬。

環(huán)境變量 $_ZL_ROOT_MARKERS 是個逗號分隔的列表,用來識別項目根目錄循帐,可改成:

export _ZL_ROOT_MARKERS=".git,.svn,.hg,.root,package.json"

這樣在用 zb 時框仔,可以回到包含 .root文件,或者 package.json 文件的父目錄拄养。

Bonuszb .. 相當于 cd ..存和,zb ... 相當于 cd ../..,而 zb .... 相當于 cd ../../.. 等等衷旅。 最后 zb ..20 等同于調(diào)用 cd .. 二十次捐腿。

MRU

z.lua 提供 dirstack 讓你更便捷的訪問最近剛剛?cè)ミ^的目錄,而不需要輸入任何關(guān)鍵字柿顶。這個方法叫做 dirstack茄袖,它記錄著最近你剛剛?cè)ミ^的 10 條最新路徑,然后是用 z -嘁锯,z --z -{num} 來操作:

# 顯示當前的 dir stack
$ z --    
 0  /home/skywind/work/match/memory-match
 1  /home/skywind/.local/etc
 2  /home/skywind/software/vifm-0.9.1
 3  /home/skywind/work
 4  /home/skywind/work/match

# cd 到棧里 2 號路徑
$ z -2
  => cd /home/skywind/software/vifm-0.9.1

# 彈出棧頂 (cd 到上一次的老路徑)宪祥,和 "z -0" 相同
$ z -
  => cd -

這個 dirstack 是根據(jù) z.lua 的路徑歷史數(shù)據(jù)計算的出來的聂薪,和具體的 shell 或者操作系統(tǒng)無關(guān)。你退出再登陸不會丟失這些路徑歷史蝗羊,不同的 shell 之間也可以共享同一份記錄藏澳。

此外,還能通過前面提到的 -I-t 參數(shù)組和耀找,使用 fzf 選擇最近去過的地方:

alias zh='z -I -t .'

首先定義個新的別名 zh(回到歷史路徑的意思)翔悠,我們用 -t 參數(shù)告訴 z.lua 按時間戳為權(quán)重排序,同時 -I 啟用 fzf 進行搜索野芒,最后句號代表任意路徑蓄愁。

當我們在命令行里輸入 zh 時,就可用 fzf 進行歷史路徑操作了:

skywind@weilin0:~$ zh
> {CURSOR} < 306/306
> -4           /home/skywind/.autojump/bin
  -5773        /home/skywind/.local/etc
  -7882        /home/skywind/.autojump
  -11603       /home/skywind/github/vim
  -11635       /home/skywind/github
  -40466       /home/skywind/.vim/vim
  -40588       /usr/share/wcd
  -40591       /usr/share
  -40811       /home/skywind/bin

第一列為上次訪問距今多少秒狞悲,第二列是目錄名撮抓。你可以試著敲幾個字母,用 fzf 的字符串模糊匹配進行定位摇锋,或者用光標鍵的上和下(CTRL+J/K 也可以)來上下移動丹拯,最后按回車 cd 過去,或者 ESC 放棄荸恕。

常用技巧:

推薦一些常用別名咽笼,放在你的配置文件中:

alias zz='z -c' # 嚴格匹配當前路徑的子路徑
alias zi='z -i' # 使用交互式選擇模式
alias zf='z -I' # 使用 fzf 對多個結(jié)果進行選擇
alias zb='z -b' # 快速回到父目錄

z.lua 可以方便的導(dǎo)入 z.sh 的數(shù)據(jù)(他們格式相同):

cat ~/.z >> ~/.zlua

還可以導(dǎo)入 autojump 的數(shù)據(jù):

FN="$HOME/.local/share/autojump/autojump.txt"
awk -F '\t' '{print $2 "|" $1 "|" 0}' $FN >> ~/.zlua

用戶評價:

“我喜歡它的原理,我在命令行下面的行為十分有規(guī)律戚炫,并且我十分懶惰剑刑,懶得管理和維護一套書簽或者路徑別名∷簦“

“總之施掏,z.lua 做到了它所宣稱的目標。如果你需要快速的在目錄間切換茅糜,它可能是最好的選擇七芭。“

”我終于可以在自己的樹莓派1上使用 autojump 類似的功能了蔑赘,而不用像以前傳統(tǒng) autojump 那樣每次打開終端都要等待 30 秒狸驳。”

更多內(nèi)容缩赛,參考項目文檔:

https://github.com/skywind3000/z.lua

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耙箍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子酥馍,更是在濱河造成了極大的恐慌辩昆,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旨袒,死亡現(xiàn)場離奇詭異汁针,居然都是意外死亡术辐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門施无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辉词,“玉大人,你說我怎么就攤上這事猾骡∪鹛桑” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵卓练,是天一觀的道長隘蝎。 經(jīng)常有香客問我购啄,道長襟企,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任狮含,我火速辦了婚禮顽悼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘几迄。我一直安慰自己蔚龙,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布映胁。 她就那樣靜靜地躺著木羹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解孙。 梳的紋絲不亂的頭發(fā)上坑填,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音弛姜,去河邊找鬼脐瑰。 笑死,一個胖子當著我的面吹牛廷臼,可吹牛的內(nèi)容都是我干的苍在。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼荠商,長吁一口氣:“原來是場噩夢啊……” “哼寂恬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起莱没,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掠剑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后郊愧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朴译,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡井佑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了眠寿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬翁。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盯拱,靈堂內(nèi)的尸體忽然破棺而出盒发,到底是詐尸還是另有隱情,我是刑警寧澤狡逢,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布宁舰,位于F島的核電站,受9級特大地震影響奢浑,放射性物質(zhì)發(fā)生泄漏蛮艰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一雀彼、第九天 我趴在偏房一處隱蔽的房頂上張望壤蚜。 院中可真熱鬧,春花似錦徊哑、人聲如沸袜刷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽著蟹。三九已至,卻和暖如春梢莽,著一層夾襖步出監(jiān)牢的瞬間萧豆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工蟹漓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炕横,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓葡粒,卻偏偏與公主長得像份殿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗽交,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容