ディレクトリ名を保持する環境変数のBashオートコンプリート


10

特にLinux Mint 14でbash 4.2.37を使用しています。

と入力して環境変数の名前をオートコンプリートするTabと、変数名の後にスペースが続きます。

変数の値がたまたまディレクトリ名である場合は、変数名の後にを続けて展開します/

たとえば、次のように入力すると、

$ ls $HOM<tab>

次のように展開されます。

$ ls $HOME _

where _はカーソルの位置を示します。問題は、私はその後、通常私が入力しなければならないことを意味自分のホームディレクトリの下にいくつかのファイルまたはディレクトリの名前を入力し続けていきたいということでbackspace、その後と/

私はそうしたい上記にまで拡大します。

$ ls $HOME/_

変数名全体を入力したときにも同じことが起こります。の後ls $HOMEtabスペースを追加し、それに/

(もちろん/、変数の値がディレクトリ名でない場合は、を追加したくありません。)

bashコマンドを使用するか、bashコマンドを更新することで、bashに希望どおりの動作をさせることができる方法はありますか$HOME/.inputrc

注:私は特にtab私が望むように動作させる方法を探しています。異なるキーストロークで同じ動作を実現する方法は興味深いでしょうが、私の質問には答えられません。

/etc/profile.d/bash_completion.shシステムとの相互作用が不十分なため、システムで無効にしましたset -o nounset。簡単な実験により、これはおそらく私の質問には関係ないことが示されています。)

ちなみに、tcshはこれを行います。環境変数$FOOBARを指定$FOOBA<tab>する$FOOBAR/と、ディレクトリを参照している場合は$FOOBAR(スペース付きで)参照している場合、タイピングは展開されます。いいえ、tcshに戻るように説得するには十分ではありません。zshもこれを行います。


+1冒険的な気分になったら、ここにコードがあります
l0b0 2014年

@ l0b0:(a)すでに持っています。(b)は、私はかなり感じていないよという冒険。(c)プログラム可能な完了であると想定されます。
キーストンプソン

回答:


6

この機能は、2014-02-26にリリースされたbash 4.3に実装されています。

NEWSファイルを引用します(の最上位に含まれます。GPG署名bash-4.3.tar.gzも参照してください):

単語補完コードは、シェル変数を含むファイル名がディレクトリ名に展開され、/必要に応じて単語に追加されるかどうかをチェックします。同じコードは、コマンド補完を実行するときに、コマンド名のシェル変数を展開します。

ソースから構築されたコピーを使用した簡単な実験では、

$ ls $HOM<tab>

それは今拡大する

$ ls $HOME/

(ちなみに、zshもこれを行います。)


1
これにはbashを手動でインストールする必要がありました。4.3はfedora 20リポジトリにありません。
jozxyqk 2014

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