Zsh, директория tab-дополнения префиксом

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

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

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

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

4 ответа

Решение

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

Другим способом достижения аналогичного эффекта является определение псевдонимов для каталогов:

setopt auto_cd
alias -d s=~/projects

Тип ~s/ Tab, чтобы перейти в подкаталог ~/projects; ты можешь использовать ~s в аргументе команды тоже.

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

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

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

Если у вас есть Zsh's autocd опцию, вы можете опустить cd,

Вы можете изменить 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)
Другие вопросы по тегам