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)