6

У меня есть каталог, куда я помещаю все свои проекты, скажем, это ~/projects в качестве примера. Я создал команду с именем s которая принимает один аргумент и перемещает меня в этот каталог. Например: s foo перемещает меня в ~/projects/foo .

Мне бы хотелось, чтобы у меня была какая-то команда завершения, которая бы действовала как cd поэтому я могу продолжать нажимать на вкладку, чтобы идти дальше в каталоги ~/projects/...

В основном, cd с префиксом, который всегда присутствует.

Я посмотрел на завершение zstyle в man zshcompsys , но понял, что просто не знаю достаточно, чтобы понять его правильно.

4 ответа4

8

Вот пример из моего собственного .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 в аргументе команды.

1

Вы можете добавить запись непосредственно в именованную хэш-таблицу каталогов:

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

Теперь вы можете просто использовать ~s , чтобы обратиться к каталогу, и вы можете использовать Tab-завершение в команде cd CD ~ с /Tab

Если у вас установлена опция autocd zsh, вы можете пропустить cd .

0

Вы можете изменить 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .