web-dev-qa-db-ja.com

複数のファイル/ディレクトリがあるときにターミナルをオートコンプリートする方法は?

次のような複数のディレクトリがある場合:

afoo abar

時々、タブを押したときに端末がオートコンプリートを拒否し(例:「cd a」、次にタブ)、代わりにディレクトリのリストを印刷します。ときどき、うるさくて迷惑な音を出すことさえあります。このような場合にオートコンプリートにする方法はありますか?たとえば、最初にabarを表示し、次にタブをもう一度押すとafooを表示できます。私はこれがWindowsの場合、またはUbuntuのいくつかのアプリケーションであると見ました

31
TifatulS

私にとって命の恩人となるのは、ダムリストを表示するのではなく、bashサイクルで可能性を巡らせることです。

Bashはreadlineを自動補完に使用しているため、次の行を~/.inputrcに追加します

満足したら、以下のソリューションを数日/数週間徹底的にテストしたら、カットアンドペースト(コピーしないでください!)から同じ設定を~/.inputrcから/etc/inputrcにはシステム全体の設定が含まれており、これをシステム上のすべてのユーザー(ゲストを含む)が利用できるようにします。

Codez:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

次に、exit端末(またはPuTTYなどのリモート端末)を開き、もう一度開きます...

例:

  1. file1file2、およびfile3の3つのファイルがある場合、次のように入力します。

    e fTabTabTab

    それは循環します:

    e file1
    e file2
    e file3
    

    そして、逆方向に循環したいときは、 Shift+Tab

  2. 入力するとき:

    very-complicated-command with lots of command line parameters
    

    次回同じコマンドが必要になったら、次のように入力します。

    very

    それはあなたのために入力します:

    very-complicated-command with lots of command line parameters
    

これにより、bashの時間を大幅に節約できます! ;-)

44
Fabby

1日後 tab さらに文字を挿入する必要があります。あなたが入力した場合

cd a

ヒット tab あなたは何も得ず、1秒後に tab (すぐに続く)aで始まる名前のリストを取得し、その後fを挿入して残りを自動補完する必要があります。

cd atabtabftabtab

になります

cd afoo
17
Rinzwind