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
完成機能を手動で呼び出すことができるかどうかです。_man
compsys(自分で呼び出される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
答え2
zshがなぜこの機能を提供しないのかわかりません。幸いにも誰かがハッキングをしました。https://github.com/Valodim/zsh-capture-completion
$ capture.zsh 'man gr'
grep
<snip>
groff
<snip>