lua loadstring傳遞引數_軟體推薦丨z.lua — 具備學習功能的快速路徑切換工具
技術標籤:lua loadstring傳遞引數
點選右上方,關注開源中國OSC頭條號,獲取最新技術資訊
z.lua 是一個會學習你使用習慣的 cd 命令,它會跟蹤你在 shell 下訪問過的路徑,通過一套稱為 Frecent 的機制(源自 Mozilla),經過一段簡短的學習之後,z.lua 會幫你跳轉到所有匹配正則關鍵字的路徑裡 Frecent 值最高的那條路徑去。
正則將按順序進行匹配,"z foo bar" 可以匹配到 /foo/bar ,但是不能匹配 /bar/foo。
特性說明:
- 效能比 z.sh 快三倍,比 fasd / autojump 快十倍以上。
- 支援 Posix Shell:bash, zsh, dash, sh, ash, busybox 等等。
- 支援 Fish Shell,Power Shell 和 Windows cmd。
- 使用增強匹配演算法,更準確的帶你去到你想去的地方。
- 低佔用,能夠僅在當前路徑改變時才更新資料庫(將 $_ZL_ADD_ONCE 設成 1)。
- 互動選擇模式,如果有多個匹配結果的話,跳轉前允許你進行選擇。
- 互動選擇模式,支援使用 fzf 進行視覺化結果篩選(可選)。
- 快速跳轉到父目錄,或者專案根目錄,代替反覆 "cd ../../.." 。
- 相容 lua 5.1, 5.2 和 5.3 以上版本。
- 自包含且無額外依賴,單個 z.lua 檔案完成所有工作。
軟體安裝:
將下面對應語句新增到你的 .bashrc / .zshrc / .profile 或者對應 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 初始化
然後重新登陸,即可使用,bash 下還支援 fzf 補全,在 --init 引數列表最後加個 "fzf" 即可使用。
使用者評價:
"我喜歡它的原理,我在命令列下面的行為十分有規律,並且我十分懶惰,懶得管理和維護一套書籤或者路徑別名。"
"總之,z.lua 做到了它所宣稱的目標。如果你需要快速的在目錄間切換,它可能是最好的選擇。"
"我終於可以在自己的樹莓派1上使用 autojump 類似的功能了,而不用像以前傳統 autojump 那樣每次開啟終端都要等待 30 秒。"
基本使用:
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 soft3: 0.25 /home/data/software2: 3.75 /home/skywind/tmp/comma/software1: 21 /home/skywind/software> {游標位置}
然後你按照最前面的序號輸入你想要去的地方,比如輸入 3 就會進入 /home/data/software。如果你不輸入任何東西直接按回車,那麼將會直接退出而不進行任何跳轉。
PS:互動選擇同時支援 "-I" 引數(大寫 i),讓你可以使用 fzf 在多項結果進行快速選擇(如果系統裡面安裝了的話)。
快速回到父目錄:
"-b" 選項可以快速回到某一級父目錄,避免重複的輸入 "cd ../../..",一般把 "z -b" 別名成 "zb" 命令:
- (沒有引數):cd 到專案根目錄,尋找父目錄中包含 (.git/.svn/.hg) 的地方,並且跳轉過去。
- (單個引數):cd 到最近一級包含關鍵字父目錄中。
- (兩個引數):對當前目錄進行字串替換,然後 cd 過去。
使用舉例:
# 一直向上退到專案根目錄(就是裡面有一個 .git 目錄的地方)~/github/lorem/src/public$ zb => cd ~/github/lorem# cd 到第一個以 g 開頭的父目錄~/github/vimium/src/public$ zb g => cd ~/github# 將 jekyll 替換為 ghost~/github/jekyll/test$ zb jekyll ghost => cd ~/github/ghost/test
向後跳轉同樣也支援環境變數 $_ZL_ECHO(用來顯示跳轉結果),這樣為搭配其他工具提供了可能性(並不需要改變當前工作目錄):
# 假設我們位於 ~/github/vim/src/libvterm# 開啟 $_ZL_ECHO 用於在每次跳轉後呼叫一次 pwd 顯示當前目錄$ _ZL_ECHO=1# 看看我專案根目錄(有 .git 那個)目錄裡有什麼?$ ls -l `zb` => ls -l ~/github/vim# 檢查 "/logs" 下面的日誌$ tail -f `zb`/logs/error.log => tail -f ~/github/vim/logs/error.log# 檢視一下某一級父目錄裡有些啥$ ls -l `zb git` => ls -l ~/github
Bonus:"zb .." 相當於 "cd ..","zb ..." 相當於 "cd ../..",而 "zb ...." 相當於 "cd ../../.." 等等。 最後 "zb ..20"; 等同於呼叫 "cd .." 二十次。
常用技巧:
推薦一些常用別名,放在你的配置檔案中:
alias zc='z -c' # 嚴格匹配當前路徑的子路徑alias zz='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 '' '{print $2 "|" $1 "|" 0}' $FN >> ~/.zlua
點選下方連結,獲取軟體下載地址↓↓↓
z.lua首頁、文件和下載 - 具備學習功能的 cd 命令 - 開源中國