コマンドは正しくオートコンプリートしますが、bash
たとえば、find
などgit
、特定のファイルパターンが完了するのを防ぐためにフィルタを使用するとすぐにエラーが発生するようです。例:
complete -f -X '*.@(cmi|cmo)' git
*.cmi
上記は、オートコンプリート機能が一致する*.cmo
ファイル名を選択しないようにする必要がありますgit
。これは期待どおりに機能します。残念ながら、これはgit
コマンドとフラグの自動補完も中断します。完成ファイルのロード順序と上記の定義を変更することは重要ではないようです。
これら2つの機能を連携させる方法についてのアイデアはありますか?
答え1
git
コマンド構文を理解する外部補完関数を呼び出す代わりに、組み込みファイル補完メカニズムを使用するようにbashに指示しましたgit
。一連のフィルタではなく、1つの完成メカニズムしかありません。一連のフィルタが必要な場合は、それをエンコードする必要があります。
幸いなことに、2.7-kLoC gitコンプリートスクリプトはgit add
これらのパターンを.gitignore
。
printf '%s\n' '*.cm[aiox]' '*.cmxa' '*.[ao]' >>.gitignore
gitの無視リストにファイルを追加せずに完了からファイルを除外するには、git add
gitコンプリートスクリプトを詳しく見てください。_git_add
which__git_complete_index_file
呼び出しは__git_index_files
候補ファイルのリストを生成するために呼び出され、その後渡されたオプションと共に順番に呼び出されます__git_ls_files_helper
。だからあなたは変更することができますgit ls-files
_git_add
_git_add
__git_complete_index_file "--others --modified --directory --no-empty-directory"
次のいくつかのオプションを追加します--exclude=*.cm[aiox]
(引用の問題に注意してください。ワイルドカードは最終的にコマンドにリンクされ、-x *.cm[aiox]
パターンが現在のディレクトリで拡張されるため機能しません)。