6

私は非常に満足している zsh ユーザーであり、特にその補完サブシステムに感謝しています。最近、特に頻繁に使用する補完コマンド (例: rm) を強化しようとしています。zsh で次のコマンドを実行します。

rm <TAB>

期待どおりに現在のディレクトリのファイルで zsh を完成させます。私がやろうとしているのは、zshに次のバリアントを完成させることです:

rm -r <TAB>

ディレクトリのみで。

(-r) パラメータを考慮してパラメータを補完する方法を知っている zsh Guru はいますか?

4

1 に答える 1

5

これは、目的の動作に合わせて zsh 補完関数を編集することで実現できますrm

Z シェル補完関数はすべて、システムのどこかに定義されています。OSX では、下にあり/usr/local/zsh/5.0.2/share/zsh/functionsます。Linux にもおそらく似たようなものがあります。

の補完関数rmは、 というファイルで定義されています_rm。かなり小さいです。(興味がある場合は、 の補完がrmdirで定義されています_directories)。

の補完を設定するにはrm -r、次のような行を変更する必要があります。

'(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'

この行の末尾の引用符内に追加します。

:*:file:_directories

これは、引数が指定されzshたときの補完がで構成される必要があることを示していると確信しています。それらを取得する方法は、関数 (ディレクトリのみを返す) を使用することです。-rfilesfiles_directories

(私はまだ私の小さな心を包み込んでいる獣なので、 100%確信はありません).zsh

使用例は次のとおりです。

ここに画像の説明を入力


より明確にするために、変更の差分を次に示します:)

<   '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]:*:file:_directories'
---
>   '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'
于 2013-09-21T15:13:56.840 に答える