Запустите команду на завершение вкладки в Zsh
Я пытаюсь настроить функцию zsh, которая возвращает меня в каталог git верхнего уровня с необязательным аргументом для перемещения относительно этого каталога. В настоящее время у меня есть это, которое работает:
alias gitdir='git rev-parse --show-toplevel'
cdgit() { cd $(gitdir)/$1 }
Проблема в том, что завершение вкладки не работает должным образом, оно будет автоматически завершаться из любого каталога, в котором я сейчас нахожусь cdgit
, но я хочу завершить с $(gitdir)
, Если я наберу следующую строку перед запуском cdgit
, завершение будет работать правильно (с $(gitdir)
):
compctl -W $(gitdir) -/ cdgit
Однако я не хочу вводить эту команду каждый раз, прежде чем набрать cdgit
просто чтобы получить вкладку завершения. Есть ли способ сделать функцию завершения для cdgit
что каким-то образом запустит эту команду, чтобы мое завершение было правильным?
1 ответ
Я бы предложил написать функцию завершения для вашего cdgit
функция.
Поместите этот файл с именем _cdgit
в каталог, который находится в вашем $fpath
например, /usr/share/zsh/site-functions
затем запустите новый экземпляр оболочки:
#compdef cdgit
local expl
local ret=1
[[ CURRENT -eq 2 ]] && _wanted directories expl 'git toplevel directory' \
_path_files -/ -W $(git rev-parse --show-toplevel) && ret=0
return ret
Это заимствовано из одной из последних строк в _cd
сама функция завершения, которая, конечно, намного сложнее.
Демо-версия:
/ usr / src / linux-git / Documentation / x86> локальный каталог cd[TAB] i386 / x86_64 / / usr / src / linux-git / Documentation / x86> cdgit [TAB]каталог верхнего уровня git Documentation/ crypto/ include/ lib/ scripts/ usr/ arch/ drivers/ init/ mm/ security/ virt/ block/ firmware/ ipc/ net/ sound/ certs/ fs/ kernel/ samples/ tools/