
私は MAC を使っていて、Iterm2 で実行している ZSH のショートカットを見つけようとしています。
シェルで bindkey と入力すると、(他のマッピングとともに) 次の内容が表示されます。
"^[b" backward-word
"^[f" forward-word
^ が Control キーであることはわかっています。しかし、Ctrl + [ + f を押しても、1 語も先に進みません。
何が足りないのでしょうか?
答え1
^
通常はコントロールですが、^[
実際には Escape または Alt (または、emacs が好きなら meta) を意味します。
Escbしたがって、これらのキーの組み合わせではまたは を押すことができますEscf。
デフォルトでは、Alt は Mac 端末では機能しませんが、iTerm2 には「Option は [ ] Normal [ ] Meta [ ] +Esc として機能します」という設定があります。必要なのは +Esc です。
答え2
実際には^[
Alt キーです。したがって、あなたの場合、ターミナル (Iterm2) は Alt + b と Alt + f を使用して単語を前後に移動します。これはターミナルによって制御され、zsh とは関係ありません。
答え3
拡張しますMRb さん答え:
Indeedは+または ( + )^[b
です。 +を前に付けると文字を文字通り表示できます。この場合、次のようになります。ESCbMeta/AltbCtrlv
Ctrl+ v Ctrl+b
^B
Ctrl+ v Meta+b
^[b
Ctrl+v ESC b
^[b
さらに、zsh マニュアルには次の内容が記載されています:
backward-word (ESC-B ESC-b) (unbound) (unbound)
Move to the beginning of the previous word.
以下についても同様ですforward-word
:
forward-word (ESC-F ESC-f) (unbound) (unbound)
Move to the beginning of the next word.
答え4
この^
表記法は、GNU の世界では制御文字を表すのによく使われます。ここでは、 は^a
Ctrl-A (ASCII 1、A は ASCII 65) です。言い換えれば、これは「これより 64 スロット前の文字を使用する」の省略形です。
キーESC
は ASCII 27 で、64 ステップ前なので[
、^[
ESC の省略形になります。
GNU Emacs エディタでは、CTRL、META などのいくつかの修飾キーが使用されていました。たとえば、CTRL-f はカーソルを 1 文字前に移動し、META-f はカーソルを 1 単語前に移動します。
META キーのない多くのキーボードに対応するために、「ESC は次の文字が META キーで押されたとみなされることを意味する」という規則があります。したがって、GNU Emacs では、ESC-f を押すとカーソルが 1 単語先に移動します。
最近ではCtrl-[
ESC 文字を与えることは非常に稀ですが、他の Ctrl の組み合わせの中に潜んでいる可能性があります。たとえば、は^^
Telnet セッションでコマンド モードにエスケープするためにまだ使用されているため、見つけられると便利です。