存在する魚の皮、他のバインディングがない場合は、空の文字列(「 」など)のSEQUENCEを指定して、一致するユニバーサルキーバインディングを設定できます。
たとえば、
bind '' self-insert
確認しましたzshのドキュメント同様の機能については、次のように言います。
-中
選択したキーマップに組み込まれたメタキーバインディングセットを追加します。バインド解除されたキーまたは自己挿入にバインドされたキーのみが影響を受けます。
私の目的に合わせて使用できるかどうかわかりません。
zshに他のバインディングがない場合、一致するユニバーサルキーバインディングは何ですか?
答え1
でzsh
キーへのマッピング(ターミナルから送信されたバイトシーケンス)が見つからないときに呼び出されるウィジェットは、デフォルトでビープ音が鳴るundefined-key
ウィジェットですが、それを別のものにオーバーライドできます。たとえば、次のようになります。
undefined-key() {
zle -M "${(q+)KEYS} is not bound to anything"
zle .$WIDGET
}
zle -N undefined-key
または、カーソルの左側に生のバイトを挿入します。
undefined-key() LBUFFER+=$KEYS
zle -N undefined-key
またはなどのキーマップでは、バイト範囲にバインドされ、キーにバインドされていself-insert
ません。self-insert
emacs
viins
R
$ bindkey | awk '$NF == "self-insert"'
" "-"~" self-insert
"\M-^@"-"\M-^?" self-insert
^?
127(バインド)を除く32(スペース)から255(M-^?)までのすべてのバイト値backward-delete-char
。
次の方法で他のコンテンツにバインドできます。
my-self-insert() { zle -M "You entered <$KEYS>"; zle self-insert; }
zle -N my-self-insert
for range (' -~' '\x80-\xff') bindkey -R $range my-self-insert
おそらくより慣用的な方法は、次を上書きすることですself-insert
。
self-insert() { zle -M "You entered <$KEYS>"; zle .$WIDGET; }
マルチバイト文字の場合、ウィジェットは文字の各バイトに対して一度呼び出され、私が知っている限り、範囲は単一バイトのみに制限できます。
self-insert
また、常に次のようにすることができますが、シングルバイトでのみ機能します。
my-self-insert() {
zle -M "You entered <$KEYS>"
repeat ${NUMERIC-1} LBUFFER+=$KEYS
}
for c ({$'\ua0'..$'\uff'}) bindkey $c my-self-insert
Unicode 文字 U+00A1 から U+00FF にバインドし (行編集バッファの左側の部分) に (ウィジェットを呼び出す端末が送信されるようにするバイトまたはバイトシーケンス) を追加してmy-self-insert
手動で自己挿入を実行します。 。$KEYS
$LBUFFER