Запустите команду на завершение вкладки в 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/ 
Другие вопросы по тегам