スマート完了が失敗した場合は、Bash Generalタブの完了を強制します。

スマート完了が失敗した場合は、Bash Generalタブの完了を強制します。

私はタブの完成がシェルの標準機能になって以来、非常に満足のいくユーザーでした。私はBashのスマートコンプリート機能(evince foo <TAB>を入力するとPDFファイルのみを検索します)も気に入っています。

Bashがスマートコンプリートを使用して完了を拒否すると、幸せな一日を台無しにすることができます。

今日私が望むもの:

tar xvf centos5.8_x86_1.ova

だから私は次のように入力します:

tar xvf cent<TAB>

.ovaファイルは通常tarによって使用されるファイルではないため、Bashはパスの完成を拒否します。

bash-completionパッケージを削除してスマートコンプリートを削除できることを知っています。ところでケーキも食べて食べてもいいですか?

bashに最初にスマートコンプリートを使用するように依頼し、失敗した場合はスマートコンプリートではないものを使用できますか?

答え1

tar、vim、およびemacsプログラムのすべての「スマート」完了が失敗した後、次のコマンドは通常のbash完了を有効にする必要があります。

compopt -o bashdefault tar vim emacs

また見てください関連ページオンラインbashマニュアルにあります。

注:現在のコマンドのスマートコンプリートとして定義されているコンプリートタイプ(コマンド/ファイル名/ユーザー名など)の正常な動作が得られます。たとえば、 を呼び出しても、補完はserviceファイル名を補完しませんcomplete -o bashdefault service

この場合とスマートオートコンプリートが失敗する他の場合は、いつでもAlt-/(またはM-/bashマニュアル表記で)を押すことで完了できます。ファイル名スマートコンプリートが無効になっている場合、TABの動作方法とほぼ同じです(M-/同様のモードを完了しないという点でほぼ同じ方法*.txt)。バラよりここコマンドやユーザー名など、他のタイプの完成に使用されるキー入力シーケンスです。

答え2

オレさん:-)、

ケーキも食べて食べてください:

<tab>bashがいつ完了するかについての最善の推測を提供します。ご存知のように、時にはこれが間違っていることがあります。

しかし、bashの完成が不完全な場合M-/ALT++(デンマーク語キーボードでは左、右ではない))SHIFTは強制的にファイルに仕上がります。そのため、ファイルに強制的に完成したいときにこれを使用します。7ALTAltGrM-/

私にとって、それは2つの世界の最高です。

答え3

bashの完成は、それ自体がbashプログラムであるbash標準の完成の拡張です。したがって、プログラムの動作方法を変更したい場合は変更してください。これはフリーソフトウェアなので、自由に使えます。このコマンドの特定の場合、tarファイルはです/usr/share/bash-completion/completions/tartar拡張子を持つファイルをオートコンプリートするには、その行に追加する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。おそらく、誰かがソースを見つけることができる場所を知らせることがまだ役に立つかもしれません。

関連情報