バッシュ:エスケープを4回押す


11

bashターミナルでエスケープを4回押すと、次のように表示されます。

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

この機能とは何ですか?これらのエントリはどのようにして見つけられますか?(2回目のEscを押すと、端末が警告音を発します。)

回答:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

これは、Emacsコマンドライン編集モードでのMeta+Esc(およびCtrl+i)のデフォルトのキーバインディングがReadline関数であることを示していますcompleteMetaキーは通常、Esc明示的に使われていないキーボード上のMetaキー。この関数のReadlineドキュメントは言う

ポイントの前のテキストを補完しようとします。実行される実際の完了はアプリケーション固有です。たとえば、Bashはテキストを変数(テキストがで始まる場合$)、ユーザー名(テキストがで始まる場合 ~)、ホスト名(テキストがで始まる場合@)、またはコマンド(エイリアスと関数を含む)として順番に処理して補完を試みます。これらのどれも一致しない場合、ファイル名の補完が試みられます。一方、Gdbはプログラムの関数と変数の補完を許可し、特定の状況でのみファイル名の補完を試みます。


Anthonの回答へのコメントについて:いいえ、Esc2回押すことはTab一般的に押すことと同じではありません(Readlineがデフォルトで行うように、両方を同じアクションにマップするプログラム内にある場合を除きます)。しかしCtrl+i であると同じTabだけのよう、Ctrl+[と同じですEsc。つまり、double がReadline 関数にバインドされている限り、必要に応じてCtrl+[ Ctrl+[inで補完を実行できます。これは、たとえばEscキーがないVT220端末で作業している場合に便利です。bashEsccomplete

ドイツ語VT220キーボード


クサラナンダ、この詳細な答えをありがとう。あなたの最後のポイントについて:両方を押した場合、なぜbash と同じではないEsc(または\M-\e)を2回押すのTabですか?
flow2k

1
@ flow2k Esc-EscとTabの両方がcomplete関数にバインドされている場合も同じです。これらはデフォルトではありますが、一般的ではありません(つまり、キープレスは「同じ」ではありません)。どこでもEsc-EscでTabを置き換えることはできません。readline対応のプログラムでのみです。ただし、どこでも、TabをCtrl-iに、またはEscをCtrl- [に置き換えることができます。
Kusalananda

可能性のあるフォローアップ:Tabの出力に表示されませんbind -p。何故ですか?多分Tab「ハードコード」されていてバインドできないからでしょうか?
flow2k 2017

1
@ flow2kいいえ、タブはCtrl-i と同じです。を探し\C-iます。これは、ハードウェアレベルで同等です。
クサラナンダ

8

これはファイル補完と呼ばれ、コマンドラインに先行するコマンドがない場合、bashは、組み込みのコマンドと、 PATH

ソートされた順序で表示されます


1
面白い-これはタブを2回押すのと同じです。おそらく2つのエスケープ= 1つのタブ?
flow2k 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.