特定のファイル名を除外するようにbashオートコンプリートルールを変更する

特定のファイル名を除外するようにbashオートコンプリートルールを変更する

vi特定のファイル名(例:files)を除外するように既存のbashオートコンプリートルールを変更したいと思いますconfig.log。私はFIGNORE成功せずに環境変数を使ってみました。組み込みルールを使用すると、既存のcompleteルールを変更するのではなく上書きします。

これを行う方法はありますか?

答え1

Bash Completeから役に立たないファイル名または拡張子を除外するには、.bashrcファイルに次の行を追加します。

FIGNORE=".log:.dvi:.pdf:"

答え2

次のコマンドを使用して、現在の構成を表示できます。

complete -p vi
complete -o bashdefault -o default -o filenames -o nospace -F _exp_ vi

そして使用されるシェル関数の定義

type _exp_

結果をフィルタリングするcomplete機能/オプションがあります。-X問題は、これがcompleteアクションでのみ機能することです。結果は動作しません-o default(わかりません-o bashdefault)。

コンポーネントを変更できます。

complete -d -f -o filenames -o nospace -F _exp_ -X '@(config.log|config.doc)' vi

残念ながら

  1. -X通話には1つしか存在できませんcomplete(以前の通話は上書きされます)。

  2. 機能するには上記が必要ですshopt -s extglob。それ以外の場合は、名前またはパターン("*.log")のみを使用できます。

関連情報