0

ここに私の補完機能があります:

f()
{    
    reply=('ok')
}
compctl -K f c

それから私はします

c

tab

c ok

何かが機能します。tabその後、私はb

c ok "a b"

そして何も起こりません。私は(bashのように)a bに置き換えられることを期待しています。ok

どうすればそれを達成できますか?

引用符内で補完を行う必要があります。私のプログラムの典型的な起動は次のようになります。c 'a, &b, c[d]' 'a < 1 and b == "2013"'

4

1 に答える 1

0

これは引用符の使用とは関係ありません。zsh はok、2 番目のケースでは補完として提供しません。これは、その引数に既に入力されているものに近い場所ではないためです。どちらの後にも完成は提供されませんc a

zsh は一般に、完了される内容がすでに入力されている内容にある程度関連していると想定し、完了関数の作成者が一致をチェックする必要がないようにします。この-Uオプションを compctl コマンドに追加して$reply、一致しないエントリであっても、リスト全体を使用するように指示できます。

また、compctl は古い zsh 補完システムに属していることにも注意してください。新しい補完システムについては、zshcompsys マンページで説明されています。

于 2013-08-08T12:48:36.487 に答える