Zsh, автодополнение каталога с помощью клавиши Tab с префиксом

Zsh, автодополнение каталога с помощью клавиши Tab с префиксом

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

Связанный контент