私は次のマッピングを作成しました。~/.zshrc
bindkey -s '^[u' 'whatever string'
vim
次のルールを設定してパターンを有効にしました。~/.zshrc
bindkey -v
私が経験している問題は、挿入モードにあるときに通常モードに入りたいときに発生します。Escape
を押すと、カーソル位置のコマンドプロンプトに追加されますu
。whatever string
これは、 を押すたびにEscape
押すことができない唯一のキーはu
通常モードに入ることです。それ以外の場合は追加しますwhatever string
。
だから私の質問は、[次へ]をクリックして切り替えられないように追加するようにAlt + u
マッピングする方法です。whatever string
Escape
u
PD1:これは最小限の作業例です。
PD2:現在使用中の解決策はキーを押すことです。Escape + {no map} + u
({no map}
まだマップされていないキーはどこにありますかAlt
?)
答え1
〜のように@JdeBPと言う、ユーザーがキーを押し続けると、端末はEscapeU u+ 001B U + 0075()などの同じ文字シーケンスを送信します。uAlt\eu
Altただし、+の場合はu2つの文字を同時に送信しますが、その場合、Escapeユーザーuは2つの文字を同時に押さないため、転送と文字の間に遅延があるため、通常はアプリケーションで知ることができます。チャイナはどこ。\e
u
行エディタでzsh
キーバインディングがあるときにキー押下が受信後数センチ秒以内に受信されないか、以外の文字がある場合に実行されます。x
xy
x
y
$KEYTIMEOUT
x
y
デフォルトは$KEYTIMEOUT
40(0.4秒)です。この値を使用すると、ユーザーは手動で複数文字のバインディングを入力できますが、複数文字のバインディングキーの組み合わせまたはファンクションキーが押されたときにのみトリガーされるように、人がキーシーケンスを入力しすぎないほど小さく設定できます。
たとえば、1(0.01秒)に変更すると、バインディングが実行された後にすばやく入力する必要があり$KEYTIMEOUT
ます。uEscape\eu
これは zsh に限定されません。カスタムキーバインディングを可能にするほとんどの対話型端末アプリケーションには同じ設定があります。たとえば、行エディタ(、、、...readline
を使用)では、これは変数(デフォルトは0.5秒)で、ビュー変数と環境変数(デフォルトは1秒)は1です。第二)。bash
python
gdb
keyseq-timeout
ncurses
ESCDELAY
vim
tm
ttm
答え2
端末が(仮想)ワイヤを介してホストに文字を送信すると、違いなしキーシーケンスEsc Uとキーコード間⎇ Alt+Uまたは複合キーシーケンス間⎈ Control+ [ U。
␛
それらはすべて文字の後に文字としてエンコードされますu
。 Zシェルは、端末からの入力文字ストリームに違いを見ないため、区別できません。ターミナルI / Oアプリケーションは、キーストロークではなく文字を表示します。