最近インストールしましたbash-completion
(homebrew経由)。補完リストで私が指定したファイルが省略されるようになりました。欲しい表示されず、次のような有効なオプションが完全に省略されます。
[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))
コマンドラインを頻繁に使用するユーザーにとって、これは非常に迷惑です。この動作を無効にする方法を誰か教えてもらえますか? ドキュメントや Google で役立つ情報は見つかりませんでした。
bash補完よくある質問言う:
Q. bash の補完コードにより、私の環境では有効な拡張子を持つファイルに対して一部のコマンドが補完されなくなります。必要なファイルに対して補完を行うには、そのコマンドの補完を無効にする必要がありますか?
A. いいえ。M-/ を使用すると (bash のマニュアル ページの言葉を借りれば)、カーソルの左側のテキストでファイル名の補完を試みます。これにより、bash 補完コードによって設定されたファイル タイプ制限が回避されます。
しかし、これは私にとって受け入れられる解決策ではありません。拡張子がファイルに対して有効かどうかに関係なく、「TAB」ですべてのファイル/ディレクトリを表示したいのです (これが、過去 20 年間私にとってうまく機能してきた方法です)。
どうすればこれを実現できるでしょうか?
.bashrc
グローバル補完スクリプトを削除するよりも、 /設定を好みます.bash_profile
。現在、bash 補完を組み込む方法は次のとおりです (これは標準の Homebrew インストールです)。
[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
更新: これを見たBash ファイル名タブ補完しかし、それは私が望んでいることとは少し違います。地球上/私のシステム上のあらゆるファイル拡張子に対して手作業が多すぎるからです。
答え1
受け入れられた回答では、コマンド補完 (つまり、python を取得するための「pyt+」など) が complete-filename に含まれていないため、コマンド補完が機能しないため、問題はまだ実際に解決TAB
されません。
complete -o default python
これですべてのコマンド (この例では「python」のみ) の問題が解決されるわけではありませんが、動作が著しく不適切な特定のコマンドについては問題が解決されます。残念ながら、すべてに「デフォルト」(つまり、Readline のデフォルト) を設定する明確な方法はないようで、使用する可能性のあるすべてのコマンドに対してこれを実行する必要があります。または、上記の .inputrc 回避策を使用してください。
答え2
これに悩まされたので、bash のマニュアルを読みました。次のファイルで目的の動作を実現できると思います~/.inputrc
:
TAB: complete-filename
M-/: complete
完全なルール スイートを備えた通常の補完は にマップされMeta-/
、ファイル名のみの補完は にマップされますTAB
。