Завершение Zsh: как найти функцию, которая используется для завершения с определенной командой?

Я пишу функцию завершения zsh для сценария/программы оболочки, которую я написал. В какой-то момент процесса завершения я хочу использовать функцию завершения другой команды для обработки остальной части завершения.

Как узнать, как называется функция завершения для конкретной команды? Как просмотреть существующие compdef назначения в моей оболочке?

Фон

Моя программа обертывает nvim, и в моей оболочке нет функции _nvim, которая, как я бы предположил, будет функцией завершения. Итак, я предполагаю, что функция завершения, которую использует nvim, на самом деле _vim, но этот вопрос более общий, чтобы учиться.


person Lucas    schedule 01.11.2020    source источник


Ответы (1)


Просто введите команду плюс пробел, а затем нажмите CtrlX, а затем H, чтобы запустить _complete_help виджет. Например:

% nvim # press ^Xh here
tags in context :completion::complete:nvim::
    argument-rest options  (_arguments _vim)
tags in context :completion::complete:nvim:argument-rest:
    globbed-files  (_files _vim_files _arguments _vim)

Это говорит вам о том, что для ввода nvim система завершения вызовет _vim, который затем вызовет _arguments, который добавляет завершения argument-rest и options. Затем _arguments вызывает _vim_files, который вызывает _files, который добавляет globbed-files завершений.

Или, если вас интересует только функция завершения верхнего уровня, которая была передана в compdef, просто сделайте следующее:

% print $_comps[nvim]
_vim
person Marlon Richert    schedule 30.11.2020