Можно ли вручную вызвать функцию завершения zsh?

Если я нахожусь в приглашении zsh, и у меня есть текущий «контекст» (частично завершенная команда командной строки)

% man gr_ ^ here I have used _ to represent the cursor 

Если я затем _complete_help функцию _complete_help Ctrl X h

Это говорит мне, что контекст

 % man gr_ tags in context :completion::complete:man:: manuals (_man) 

Если я правильно читаю этот вывод – я вижу, что есть функция _man которая может _man все известные _man страницы, которые будут вызываться, если я нажму клавишу Tab в этот момент.
Мой вопрос: можно ли вручную _man функцию _man completeter? вместо того, чтобы _man был вызван compsys (который сам вызывается Tab )?

Я попытался использовать мини-буфер zle <Esc>x , затем введите _man<Enter> но я думаю, что мини-буфер способен только понимать команды zle, а не выполнять общие функции.

2 Solutions collect form web for “Можно ли вручную вызвать функцию завершения zsh?”

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

Вот что я сделал, чтобы привязать _man завершения _man к комбинации клавиш, чтобы ее можно было вызвать вручную.

Определите функцию-оболочку, которая задает требуемые параметры.

 _man_autonomous () { eval $_comp_setup _man "$@" } 

Зарегистрируйте новый виджет с редактором строк:

 zle -C complete-man expand-or-complete _man_autonomous 

привяжите виджет к Ctrl + T

 bindkey '^T' complete-man 

В этом примере используется метод _files в zsh FAQ .

Я не уверен, почему zsh не предоставляет эту функциональность … К счастью, кто-то взломал: https://github.com/Valodim/zsh-capture-completion

 $ capture.zsh 'man gr' grep <snip> groff <snip> 
  • ZSH: путь удаления, имя файла и расширение из списка файлов для соединения команды
  • Zsh preexec - Как обрезать все ведущие отступы от кодового блока?
  • вставить url в терминал (urxvt, zsh) не удалось, некоторые символы сбрасываются
  • У нас больше истории для cd?
  • Удалить keymap и полностью отключить ключ в zsh
  • Как отключить «auto cd» в zsh с помощью oh-my-zsh
  • Сценарий bash / zsh не вызывается из терминала в FreeBsd, ни в bash, ни в zsh
  • цепочка терминальных команд, каждая из которых выполняется, если файл существует
  • Завершение слов на экране, как в VIM (Bash или Tmux)
  • Прочитайте первую строку вывода команды. Команда соединяет меня с удаленным терминалом
  • обработка подстановки команд в рыбах против других оболочек (sh, bash, zsh)
  • Linux и Unix - лучшая ОС в мире.