我有一個目錄,其中放置了所有項目,假設它是~/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)