web-dev-qa-db-ja.com

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

Linuxの場合は、Ubuntuのターミナルでは大文字と小文字が区別される自動補完が使用されます。

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

140
mwfearnley

現在のユーザーに対して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

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

164
Panther

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

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

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

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

それで全部です。

48
emtin4

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

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

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

11
init3

これを行うには、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または reload inputrc を再起動します。と Ctrl+xCtrl+r

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

3
mwfearnley