BashでTabの自動補完で大文字と小文字を区別しないようにできますか?


144

Linuxで期待されるように、Ubuntuのターミナルは大文字と小文字を区別する自動補完を使用します。

しかし、代わりに大文字と小文字を区別しない名前を使用すると、名前を開始するときに正確である必要がなくなり、おそらく追加の誤検知の価値があると思います。この動作を変更することは可能ですか?


とてもいい質問です。使いやすさのツールとして、タブ補完は、物事に名前を付ける際に、一般的なコンピューターシステムほど厳密であってはなりません。
masterxilo

回答:


170

するためにはbash、現在のユーザーへのために、大文字と小文字を区別しません:

ターミナルで次のシェルスクリプトを実行します。

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

新しいシェルを開始します(ターミナルを再度開きます)。

システム全体に変更を加えるには:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

詳細については、を参照してくださいman bash。はい、それは長いページですが、bashはやや複雑なプログラムであり、「大文字と小文字を区別しない」ためにそのページを検索する場合は、関連するセクションに移動します。通常、bashは一度に1つのオプションまたはbashスクリプトを1つずつ学習し、すべてのニュアンスを習得するには長い時間がかかります。関心は異なる場合があります。


ありがとう。ユーザー固有/管理者に優しいソリューションに感謝します。エコー行は機能しているように見えますが、Ctrl-左/右を使用してカーソルを移動する機能を失ったようです。また、>>より安全>でしょうか?
mwfearnley

一般的に>>はより安全になりますが、私の間違いは、〜/ .inputrcがなかったと仮定していました。また、noclobber =)を設定します。矢印キーが機能しない理由を少し確認して、それを複製することはできません。〜/ .inputrcを削除して、新しいシェルを開始できます。
パンサー

ええ、それを削除すれば再び動作します。linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.htmlによると、新しいinputrcはグローバルなinputrcをオーバーライドしているのでしょうか?
mwfearnley

2
なんてこった、これを/ etc / inputrcにコピーして、もう「i」と入力することはできず、「e」と入力してもコンソールに「ssssssssss [..]」とスパムされるだけです。
ルカスティーブ

2
@LucaSteeb私もそれを見つけましたが、このブロック全体が.inputrcに入れられるのではなく、一度入力されたことに気付きました。のみ$include /etc/inputrcset completion-ignore-case onあなたの〜..inputrcファイルにする必要があります。
クリス

49

ターミナルを開き、次のコマンドを入力します。

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

パスワードを入力する。ターミナルを再起動します。

大文字小文字を区別せずに削除したい場合は、set completion-ignore-case行を削除して/ etc / inputrcファイルを編集してください。

それで全部です。


OK、あなたのためにそれを明確にした。bashについて学ぶにはしばらく時間がかかりますが、探索、読書、および質問を続けます。linuxcommand.orgは人気のあるスタートです;)
パンサー

3
場合、これは、すべてのためにそれを変更し、複数のユーザが存在するかもしれない、または所望の動作ではないかもしれない
ウォルターTross

2
はるかにここで最もまっすぐ進むと単純な答え
workabyte

シンプルで明確な答え
Developerium

12

私はこの質問が非常に古いことを知っていますが、何かを逃さない限り、bashを使用している場合は非常に簡単な解決策があると思います。

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

または、お好みのテキストエディターを使用して行を追加します。bashセッションを再起動してお楽しみください。


2
さて、あなたは何かを見逃しています:~/.inputrcreadlineによって読み取られます。これは、bashがこの補完を提供するために使用するものです。Readlineは他のプログラムでも使用されるため、一般的にこれを設定するには~/.inputrc、提案されているように、受け入れられた答えの方が良いでしょう。
ムル

あなたの提案をありがとう、それは私にもう少し教えてくれますが、私は受け入れたものよりも簡単ではないことを言わなければなりません。新しいファイルが古いものを無効にしないように追加の行を使用するだけです。
mwfearnley

完璧です。覚えてbind 'set completion-ignore-case on'おくべき唯一のことは、新しい行に行くべきです.bashrc
ビシュラント

3

これを行うには、GNU readlineの構成変数を設定します。これは、対話型シェルで入力を処理するものです。

必要な変数はcompletion-ignore-caseであり、bashセッションで直接設定できます:

bind "set completion-ignore-case on"

すべてのユーザーに対して有効にするために、ユーザーの~/.inputrcファイルまたはシステム/etc/inputrcに配置することにより、将来のすべてのbashセッションに対して有効にすることができます。これはreadlineの初期化ファイルです。

ただし~/.inputrc、作成すると、システムコピー上書きされることに注意してください。(私にとって、これはCtrl-Left/ などのいくつかのキーマッピングを失う原因となりましたRight/etc/inputrcファイルを熟読することでどのマッピングを確認できます。)
この問題を修正する方法は、行$include /etc/inputrcをの先頭に置くことです~/.inputrc

$include /etc/inputrc

set completion-ignore-case on

変更を適用するには、bashを再起動するか、inputrcをリロードします(例:、Ctrl+xなど)Ctrl+r

readlineとinputrcの詳細については、man bashおよびを参照してくださいman 3 readline

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.