zsh完了機能を手動で呼び出すことはできますか?

zsh完了機能を手動で呼び出すことはできますか?

zshプロンプトにあり、現在「コンテキスト」(部分的に完了したコマンドラインコマンド)がある場合

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

その後、_complete_help関数を呼び出すとCtrlXh

文脈がこれだと言ってくれる

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

この出力を正しく読み取ると、_manすべての既知のマニュアルページを一覧表示する完全な関数があることがわかります。Tabこの時点でキーを押すと、対応する関数が呼び出されます。
私の質問は、_man完成機能を手動で呼び出すことができるかどうかです。_mancompsys(自分で呼び出されるTab)によって呼び出される代わりに?

zle minibuffer を使ってみた<Esc>x後に を入力してみましたが_man<Enter>、 minibuffer は zle コマンドだけを理解して一般的な機能を実行できないようです。

答え1

単純な完成関数で可能で使用できることがわかりましたが、この特定の関数はいくつかの_man解析と検証操作を実行するため、予想されるコンテキストの外で呼び出すとエラーが発生します。

_man手動で呼び出すために、完成関数をキーの組み合わせにバインドする方法は次のとおりです。

必要なオプションを設定するには、ラッパー関数を定義してください。

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

行エディタを使用して新しいウィジェットを登録します。

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

Ctrlウィジェットを+にバインドT

bindkey '^T' complete-man

一つある_fileszsh FAQでこの技術を使用する例

答え2

zshがなぜこの機能を提供しないのかわかりません。幸いにも誰かがハッキングをしました。https://github.com/Valodim/zsh-capture-completion

$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>

関連情報