У меня есть каталог, куда я помещаю все свои проекты, скажем так, ~/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
для ссылки на свой каталог, а также использовать Tab-дополнение в 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)