インテリジェントな補完が失敗した場合にBashの通常のタブ補完を強制する


10

タブ補完がシェルの標準機能になったので、私はそれをとても幸せに使用しています。私はBashのインテリジェントな補完(evince foo <TAB>と入力するとPDFファイルのみを検索する)も気に入っています。

Bashがインテリジェントな補完を使用して補完を拒否した場合、それ以外の場合は幸せな日を台無しにします。

今日私はしたかった:

tar xvf centos5.8_x86_1.ova

だから私は入りました:

tar xvf cent<TAB>

.ova-filesは通常tarで使用するものではないため、Bashはパスの完成を拒否します。

私はbash-completionパッケージをアンインストールしてインテリジェントな補完を削除できることを知っています。でもケーキを持って食べてもいいですか?

最初にインテリジェントな補完を使用するようにbashに要求できますが、それが失敗した場合は、インテリジェントでない補完を使用できますか?


1
<spam> Zshはそれを行うことができます。</ spam>
ジル 'SO-悪をやめる'

回答:


9

プログラムtar、vim、およびemacsのすべての「インテリジェント」な補完が失敗した後、以下は通常のbash補完をオンにします。

compopt -o bashdefault tar vim emacs

オンラインbashマニュアルの関連ページも参照してください。

警告:手元のコマンドのインテリジェントな補完によって定義された補完のタイプ(コマンド/ファイル名/ユーザー名など)の通常の動作が得られます。たとえば、serviceを呼び出しても、の補完はファイル名を補完しませんcomplete -o bashdefault service

インテリジェントな自動補完が失敗するこれと他のケースでは、あなたは常に押すことができますAlt-/(またはM-/、bashのマニュアルの表記で)完全にファイル名をほとんどインテリジェント完了が無効になっている場合はTABが動作するのと同じように(ほぼ同じような意味でM-/ありませんのような完全なパターン*.txt)。コマンドやユーザー名など、他のタイプの補完のキーシーケンスについては、こちらをご覧ください。


2
Alt- /への言及のおかげで、そこにあるとは思いもしませんでした
Michael Speer

1

bash補完はbashの標準補完の拡張であり、それ自体がbashプログラムです。したがって、プログラムの動作を変更したい場合は、変更してください。これはフリーソフトウェアであり、あなたはそれを自由に行うことができます。tarコマンドの特定のケースでは、ファイルは/usr/share/bash-completion/completions/tarです。以下のためtarの拡張子を持つファイルを自動補完するためにova、単に行に追加します

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

だからそれは言う

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

これは、Debian Wheezy(現在の安定バージョン)に存在するパスとコードであることに注意してください。ディストリビューションやバージョンが異なるとコードが異なる場合がありますが、考え方は同じです。コードを開いて調整し、必要な操作を行います。

編集:私はちょうど質問が一致を見つけられないというたびにあり、に追加ovaする特定のケースだけではないことに気づきましたtar。多分それは彼らがどこでソースを探すことができるかを知るために、それでも誰かにとって有用かもしれません。


4
パッケージマネージャが所有する/ usr内のファイルを変更することは、アップグレードに厄介な衝撃を与える良い方法です。より良い:パッケージ化された構成をオーバーライドします。
Chris Down 14年

1
@ChrisDownとあなたはどうしますか?私はまだクリーンな.bashrcソリューションを探しています。
クレイトンスタンレー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.