Bash / zshタブオートコンプリート:初期コマンドが与えられたら、オートコンプリートを使用してディレクトリ内の特定のファイルを無視します。

Bash / zshタブオートコンプリート:初期コマンドが与えられたら、オートコンプリートを使用してディレクトリ内の特定のファイルを無視します。

私が尋ねる質問は少し具体的であり、Unix Stackexchangeの他のオートコンプリートの質問とは異なるかもしれません。

次のディレクトリがあるとします。

-rw-r--r-- 1 hlin117 staff 1.1K Sep 19 13:05 doc.aux
-rw-r--r-- 1 hlin117 staff  26K Sep 19 13:05 doc.log
-rw-r--r-- 1 hlin117 staff 177K Sep 19 13:05 doc.pdf
-rw-r--r-- 1 hlin117 staff  13K Sep 19 13:01 doc.tex

そうしようとしてもあまり役に立たず、一般的な状況なら私もそうvim doc.pdfしないだろう。代わりによくする方です。vim doc.logvim doc.aux

vim doc.tex

残念ながら、tab-autocompleteはただdoc.tex

vim \tこれを入力してディレクトリ内の一部のファイルを無視する方法はありますか?

より一般的にcommandを入力してコマンドを入力すると、ディレクトリ内のファイルを無視するX \t設定を作成できますか?X

注:私はzshを使います。 bashとzshの同様の解決策があるかどうかはわかりません。

答え1

zshで「新しい」完成システムを使用するには(たとえば、システムcompinitにいる場合.zshrc)、次のようにします。file-patternsスタイル

zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'

完了していない場合、*.(aux|log|pdf)パターンに一致するファイルのみがコマンドラインで完了します。vim

*特に、明示的に一致するコマンドを除くすべてのコマンドを一致させるために、コマンド名パターンを使用できます。

答え2

zshを使わずにもっと一般的なオプションがあるので、ここに追加します。

.bashrcbash組み込みコマンドを使用して1行だけ入力しますcomplete。たとえば、

complete -f -X '*.@(aux|log|pdf)' -o plusdirs vim

-fファイル名を完成させる場所は、-Xglob文字列を使用して可能な選択肢から一致するパターンをフィルタリングします-o plusdirs〜の後リストにサブディレクトリを追加します。

関連情報