Escキー(ESC)を押すたびに、bashは私が入力した次の文字を無視します。これは普通ですか?挿入モードから通常モードに戻るときに使用するvimを使用すると、Escキーを繰り返し押す習慣があるため、これは迷惑です。
Bashはなぜこのように動作し、どのように消えますか?
答え1
これはANSI端末の通常/予想動作です。
入力中、Esc端末は最終処理を開始する。ANSIエスケープシーケンス(続けて入力すると[カーソルAが上がります。)
したがって、Esc端末がシーケンスの次の文字を待ってから既知のシーケンスに属していない場合、処理は停止しますが、Esc入力した2文字と次の文字は失われます(これらは無効なシーケンスの一部です。廃棄されました)。
それを止める方法?できることの 1 つは、timeout()
たとえば、プログラムから呼び出して端末の文字間タイムアウトを変更することです。バラよりこれ:
入力エスケープシーケンスを解釈すると、wgetchは次の文字を待っている間にタイマーを設定します。 notimeout(win、TRUE)が呼び出されると、wgetchはタイマーを設定しません。タイムアウトの目的は、ファンクションキーから受信したシーケンスとユーザーが入力したシーケンスを区別することです。
答え2
bashrcファイルを確認し、1行を見つけてset -o vi
次に変更します。set -o emacs
問題がまだ存在し、独自のvimモードが組み込まれているalacrityなどの端末エミュレータを使用している場合は、エミュレータ設定を変更する必要があります。
編集:これは最も一般的な方法ですが、inputrcファイルがある場合はviモードの設定にも使用できます。 inputrcファイルがある場合、set editing-mode vi
ファイルと行が存在する場合、コマンドはそこにあります。コメントアウトするだけです。または行を削除してください。
答え3
Escキーを押してから他のキーを押すと、多くの端末エミュレータがAlt + Keyキーストロークを送信する代わりに処理されます。たとえばEsc、A+と同じです。したがって、Escキーを押した後に最初のキー入力が実際に失われたわけではありませんが、期待した方法で送信されないという点で「失われる」ことは珍しくありません。AltA