状況に応じたbash完成でワイルドカードの動作を変更

状況に応じたbash完成でワイルドカードの動作を変更

その過程で、mvやrmなどのコマンドでワイルドカードを使用した後、Tabをダブルクリックする習慣が生じました。これにより、デフォルトでbashはワイルドカード拡張と一致するファイルのリストを表示します。たとえば、

  {~/bin}-> ls p*<TAB>
  pnuke         pscp          pssh          
  prsync        pslurp        pssh-askpass  

ただし、Debian Jessieでbash_completionパッケージを使用するとこの動作が変わります。ファイル名を完成させるときのデフォルトの動作は、すべてのワイルドカード文字を拡張子と一致する最初の(最初のみ)ファイルに置き換えることです。 bash_completionがインストールされた状態で上記と同じ例を使用すると、タブをクリックした後にコマンドラインが次のように変更されます。

  {~/bin}-> ls pnuke

この状況でbashが取ることができるすべての可能な措置の中で、これが最も役に立たないようです。ファイル名ではなくコンテンツを完成するときにbash_completionが提供する他のすべての利点を引き続き取得しながら、デフォルトのreadlineファイル補完動作を復元する方法はありますか?それともデフォルトの動作でない場合は、少なくとも役に立つ作業を実行できますか? (何もしないことでさえ、これよりも役に立ちます。)

答え1

ls p+のTab代わりに+を入力すると、あなたが望む動作を得ることがls p*できることをご存知でしたかTab

またはls p*+Alt - !またはls p*+ Ctrl - x+を入力できます!

Alt - !合計Ctrl - x+は次のように!なります。完全なコマンドそして可能なコマンドの完成、それぞれ。Tab次に、再バインドできます。完全なコマンド通過するbind '\C-i:complete-command'。これにより、必要なグローバル拡張が提供されますが、他のタスクの完了がめちゃくちゃになる可能性があります。

より良い解決策があることを願っています。この変更を導入したBashのバージョンを知っている場合は、そのバージョンを見つける可能性が高くなります。

答え2

Bashバージョンはあまり関連性がなく、この動作はbash-completion(別々のプロジェクト)の一部です。

このパッケージを削除するか、その設定ファイルを編集すると、必要なデフォルト動作が提供されます。

関連情報