サフィックスに基づいてbash完了からファイル名を削除する方法は?

サフィックスに基づいてbash完了からファイル名を削除する方法は?

重複した内容ならお詫び申し上げます。しかし、編集しようとしましたが失敗しましたvim

特にLaTeX文書を編集するときに使用したくないことが多いです。つまり、ドキュメントがコンパイルされたときに生成される他のファイルではなく、ファイルのみをvim編集したいと思います。.tex.aux.pdf

私はこのコマンドで遊んcompleteだが、あまり楽しかった。

次のコマンドが.aux生成されたファイル名のリストからファイルを削除しないのはなぜですか?

$ complete -o default -X '^.*aux' vim

ベストアンサー1

必要なパターンは正規表現ではなくglobなので、ファイルが完成していることを知らなければbashなりません。-fまた、これdefaultでフィルタリングしたファイル名が追加されるので、そのオプションを削除するか別のものを選択します(ディレクトリも完成するように-oこのオプションを使用しました)。dirnames次の作業を行う必要があります。

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

man使用されたglobの関連ページを参照してください。

組み込みのshoptを使用してextglobシェルオプションを有効にすると、複数の拡張パターン一致演算子が認識されます。以下の説明では、パターンリストは、 | で区切られた 1 つ以上のパターンのリストです。複合パターンは、次のサブパターンのうちの1つ以上を使用して形成できます。

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

extglob完了したら有効にする必要がありますbashが、そうでない場合でもこれを行う必要があります。

おすすめ記事