Zsh,帶有前綴的目錄製表符補全

Zsh,帶有前綴的目錄製表符補全

我有一個目錄,其中放置了所有項目,假設它是~/projects一個範例。我建立了一個名為 的命令s,它接受一個參數,並將我移到該目錄中。例如:s foo讓我移動到~/projects/foo

我想要的是某種類型的完成命令,這樣cd我就可以繼續點擊tab以進一步進入~/projects/...目錄。

基本上,cd帶有始終存在的前綴。

我研究了 中的 zstyle 補全man zshcompsys,但意識到我對它的了解還不夠,無法正確理解它。

答案1

這是一個例子我自己的.zshrc我保留作為複製/貼上片段:

# Try using the below template to set up zsh functions that act
# as aliases to cd and allow you to get autocomplete nicely.

project() { cd /path/to/project/$1; }
compctl -W /path/to/project/ -/ project

只需編輯/path/to/project上面兩行的部分即可。

答案2

實現類似效果的另一種方法是為目錄定義別名:

setopt auto_cd
alias -d s=~/projects

鍵入以更改為;~s/ Tab的子目錄您也可以在命令參數中~/projects使用。~s

答案3

您可以將條目直接新增到指定目錄雜湊表中:

hash -d s="${HOME}/projects"

現在您可以簡單地使用~s來引用您的目錄,並且可以在cd命令中使用製表符補全: cd ~s/Tab

如果您設定了 zsh 的autocd選項,則可以省略cd.

答案4

您可以修改CDPATH

export CDPATH="$CDPATH:$HOME/Repositories:$HOME/Repositories/jc/Projects"

現在,您可以從每個其他目錄存取指定目錄中的所有子目錄,就好像它們是目前目錄的子目錄一樣:

➜  ~ /tmp
➜  /tmp pwd
/tmp
➜  /tmp MyAwesomeProject 
~/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master) pwd
/Users/rafael/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master)

相關內容