今回は、bashのショートカットキーをzshに対応させたもののうち、前回取り上げきれなかったものをまとめておく。bashとzshでは全ての機能が1対1で対応しているわけではないので、いくつかの機能はzshでは使うことができない。本連載ではbashをベースにまとめているので、まずはbashベースでショートカットキーをまとめておこう。

bashのショートカットキー設定をzshで実現する(その2)

bashに対応させたzshの残りの設定は次の通りだ。

キー 操作
「↑」 コマンド履歴から1つ前のコマンドを表示(古いほうへ)
「↓」 コマンド履歴からひとつ後のコマンドを表示(新しいほうへ)
「Ctrl」+「r」 インクリメンタルコマンド履歴検索(古いほうへ)
「Ctrl」+「s」 インクリメンタルコマンド履歴検索(新しいほうへ)
キー 操作
キー 操作
「Tab」 補完
キー 操作
該当なし キーボードマクロの記録を開始
該当なし キーボードマクロの記録を終了
該当なし キーボードマクロを実行
キー 操作
「Ctrl」+「_」 アンドゥ
「Ctrl」+「l」 スクリーンクリア
キー 操作
「Ctrl」+「v」 文字をそのまま入力する
「Ctrl」+「q」 文字をそのまま入力する

「文字をそのまま入力」を実現するために~/.zshrcに追加する設定

bindkey '^Q'        quoted-insert       # Ctrl-q

キーボードマクロに関しては対応する機能が存在していないが、ほかはほとんど同じだ。

アンドゥと「Ctrl」+「Z」

Windowsだとアンドゥは「Ctrl」+「Z」に割り当てられていることが多い。Macなら「⌘」+「Z」だ。なぜ「Z」に割り当てられているかだが、1970年代に設計されたエディタで使われていたアンドゥのショートカットキー設定が現在に広がった結果だと考えられている。

そのエディタでは「Z」「X」「C」「V」に「アンドゥ」「切り取り」「コピー」「貼り付け」の機能が割り当てられたそうだ。現在でもおなじみのショートカットキーだが、当時このキーに割り当てられた理由は「Ctrl」キーから近くて押しやすいからだと言われている。現在ではこの組み合わせのショートカットキーが広く使われており、デファクトスタンダートと言ってよいだろう。

Happy Hacking Keyboard Professional2 Type-Sの場合

一方、UNIX系OSのターミナルでは、「Ctrl」+「Z」が実行中のプロセスを一時停止するショートカットキーとして使われることが多い。bashでもzshでもアンドゥは「Ctrl」+「_」に割り当てられているが、それはすでに「Ctrl」+「Z」が使われているからだ。

では、なぜプロセスの一時停止が「Ctrl」+「Z」に割り当てられているかだが、こちらは想像力しやすい。英語圏では眠っていることを示す文字列として「zzzz」「zzZZ」「ZZzz」といった文字が使われる。これはいびきや寝息を表したものだ(日本だと寝息は「ぐーぐー」という擬音語が使われることが多い)。このため、「プロセスを停止させる→プロセスを眠らせる」という連想から「Ctrl」+「Z」でプロセスの停止というわけだ。

もちろん設定を変更すれば「Ctrl」+「Z」をアンドゥに割り当てることもできる。Windowsアプリケーションを使うことが多ければ、ターミナルやシェルの設定を変更するのもありだろう。

付録 Windows Terminal キーとキー表記

キー キー表記
「ESC」 ^[
「ESC」「ESC」 ^[^[
「Home」 ^[[H
「Insert」 ^[[2~
「Delete」 ^[[3~
「End」 ^[[F
「Page Up」 ^[[5~
「Page Down」 ^[[6~
「F1」 ^[OP
「F2」 ^[OQ
「F3」 ^[OR
「F4」 ^[OS
「F5」 ^[O15~
「F6」 ^[O17~
「F7」 ^[O18~
「F8」 ^[O19~
「F9」 ^[O20~
「F10」 ^[O21~
「Alt」+「Home」 ^[[1;3H
「Alt」+「Insert」 ^[[2;3~
「Alt」+「Delete」 ^[[3;3~
「Alt」+「End」 ^[[1;3F
「Alt」+「Page Up」 ^[[5;3~
「Alt」+「Page Down」 ^[[6;3~
「Ctrl」+「Home」 ^[[1;5H
「Ctrl」+「Insert」 ^[[2;5~
「Ctrl」+「Delete」 ^[[3;5~
「Ctrl」+「End」 ^[[1;5F
「Ctrl」+「Page Up」 ^[[5;5~
「Ctrl」+「Page Down」 ^[[6;5~
「↑」 ^[[A
「↓」 ^[[B
「→」 ^[[C
「←」 ^[[D
「Alt」+「↑」 ^[[1;3A
「Alt」+「↓」 ^[[1;3B
「Alt」+「→」 ^[[1;3C
「Alt」+「←」 ^[[1;3D
「Ctrl」+「↑」 ^[[1;5A
「Ctrl」+「↓」 ^[[1;5B
「Ctrl」+「→」 ^[[1;5C
「Ctrl」+「←」 ^[[1;5D
貼り付け開始 ^[[200~
クエリステータスレポート ^[[5n
クエリステータスレポート(応答) ^[[0n
「Backspace」 ^?
「Ctrl」+「Backspace」 ^H
「Tab」 ^I
「Enter」 ^M

付録 Mac Terminal キーとキー表記

キー キー表記
「ESC」 ^[
「ESC」「ESC」 ^[^[
「Home」 なし
「Insert」 なし
「Delete」 ^[[3~
「End」 なし
「Page Up」 なし
「Page Down」 なし
「F1」 ^[OP
「F2」 ^[OQ
「F3」 ^[OR
「F4」 ^[OS
「F5」 ^[O15~
「F6」 ^[O17~
「F7」 ^[O18~
「F8」 ^[O19~
「F9」 ^[O20~
「F10」 なし
「F11」 ^[O23~
「F12」 ^[O24~
「Alt」+「Home」 なし
「Alt」+「Insert」 なし
「Alt」+「Delete」 なし
「Alt」+「End」 なし
「Alt」+「Page Up」 なし
「Alt」+「Page Down」 なし
「Ctrl」+「Home」 なし
「Ctrl」+「Insert」 なし
「Ctrl」+「Delete」 ^[[3;5~
「Ctrl」+「End」 なし
「Ctrl」+「Page Up」 なし
「Ctrl」+「Page Down」 なし
「↑」 ^[[A
「↓」 ^[[B
「→」 ^[[C
「←」 ^[[D
「Alt」+「↑」 なし
「Alt」+「↓」 なし
「Alt」+「→」 なし
「Alt」+「←」 なし
「Ctrl」+「↑」 ^[[A
「Ctrl」+「↓」 ^[[B
「Ctrl」+「→」 ^[[1;5C
「Ctrl」+「←」 ^[[1;5D
貼り付け開始 ^[[200~
クエリステータスレポート ^[[5n
クエリステータスレポート(応答) ^[[0n
「Backspace」 ^H
「Ctrl」+「Backspace」 ^H
「Tab」 ^I
「Enter」 ^M

付録 zsh bindkey 出力キー対応表

キー表記 キー zshzle標準ウィジェット
^[a 「ESC」「a」 accept-and-hold
^[A 「ESC」「A」 accept-and-hold
^J 「Ctrl」+「J」 accept-line
^M 「Ctrl」+「M」 accept-line
^O 「Ctrl」+「O」 accept-line-and-down-history
^[[D 「←」 backward-char
^[OD 「ESC」「O」「D」 backward-char
^B 「Ctrl」+「B」 backward-char
^? 「Backspace」 backward-delete-char
^H 「Ctrl」+「H」 backward-delete-char
^[^? 「ESC」「Backspace」 backward-kill-word
^[^H 「ESC」「Ctrl」+「H」 backward-kill-word
^W 「Ctrl」+「W」 backward-kill-word
^[b 「ESC」「b」 backward-word
^[B 「ESC」「B」 backward-word
^[< 「ESC」「<」 beginning-of-buffer-or-history
^A 「Ctrl」+「A」 beginning-of-line
^[[200~ 貼り付け開始 bracketed-paste
^[C 「ESC」「C」 capitalize-word
^[^L 「ESC」「Ctrl」+「L」 clear-screen
^L 「Ctrl」+「L」 clear-screen
^[^_ 「ESC」「Ctrl」+「_」 copy-prev-word
^[w 「ESC」「w」 copy-region-as-kill
^[W 「ESC」「W」 copy-region-as-kill
^D 「Ctrl」+「D」 delete-char-or-list
^[0 「ESC」「0」 digit-argument
^[1 「ESC」「1」 digit-argument
^[2 「ESC」「2」 digit-argument
^[3 「ESC」「3」 digit-argument
^[4 「ESC」「4」 digit-argument
^[5 「ESC」「5」 digit-argument
^[6 「ESC」「6」 digit-argument
^[7 「ESC」「7」 digit-argument
^[8 「ESC」「8」 digit-argument
^[9 「ESC」「9」 digit-argument
^[l 「ESC」「l」 down-case-word
^[L 「ESC」「L」 down-case-word
^[[B 「↓」 down-line-or-history
^[OB 「ESC」「O」「B」 down-line-or-history
^N 「Ctrl」+「N」 down-line-or-history
^[> 「ESC」「>」 end-of-buffer-or-history
^E 「Ctrl」+「E」 end-of-line
^X^X 「Ctrl」+「X」「Ctrl」+「X」 exchange-point-and-mark
^[z 「ESC」「z」 execute-last-named-cmd
^[x 「ESC」「x」 execute-named-cmd
^[ 「ESC」「 」 expand-history
^[! 「ESC」「!」 expand-history
^X* 「Ctrl」+「X」「*」 expand-word
^[[C 「→」 forward-char
^[OC 「ESC」「O」「C」 forward-char
^F 「Ctrl」+「F」 forward-char
^[f 「ESC」「f」 forward-word
^[F 「ESC」「F」 forward-word
^[c 「ESC」「c」 fzf-cd-widget
^I 「Ctrl」+「I」 fzf-completion
^I 「Tab」 fzf-completion
^T 「Ctrl」+「T」 fzf-file-widget
^R 「Ctrl」+「R」 fzf-history-widget
^[g 「ESC」「g」 get-line
^[G 「ESC」「G」 get-line
^Xr 「Ctrl」+「X」「r」 history-incremental-search-backward
^S 「Ctrl」+「S」 history-incremental-search-forward
^Xs 「Ctrl」+「X」「s」 history-incremental-search-forward
^[p 「ESC」「p」 history-search-backward
^[P 「ESC」「P」 history-search-backward
^[n 「ESC」「n」 history-search-forward
^[N 「ESC」「N」 history-search-forward
^X^N 「Ctrl」+「X」「Ctrl」+「N」 infer-next-history
^[_ 「ESC」「_」 insert-last-word
^[. 「ESC」「.」 insert-last-word
^X^K 「Ctrl」+「X」「Ctrl」+「K」 kill-buffer
^K 「Ctrl」+「K」 kill-line
^U 「Ctrl」+「U」 kill-whole-line
^[d 「ESC」「d」 kill-word
^[D 「ESC」「D」 kill-word
^[^D 「ESC」「Ctrl」+「D」 list-choices
^Xg 「Ctrl」+「X」「g」 list-expand
^XG 「Ctrl」+「X」「G」 list-expand
^[- 「ESC」「-」 neg-argument
^X^O 「Ctrl」+「X」「Ctrl」+「O」 overwrite-mode
^[q 「ESC」「q」 push-line
^[Q 「ESC」「Q」 push-line
^Q 「Ctrl」+「Q」 push-line
^[‘ 「ESC」「’」 quote-line
^[" 「ESC」「”」 quote-region
^V 「Ctrl」+「V」 quoted-insert
^[h 「ESC」「h」 run-help
^[H 「ESC」「H」 run-help
“-“~ 「 」から「~」までの文字 self-insert
\M-^@”-“\M-^? 「Alt」+「Ctrl」+「@」から「Alt」+「Ctrl」+「Backspace」までの入力 self-insert
^[^I 「ESC」「Tab」 self-insert-unmeta
^[^J 「ESC」「Ctrl」+「J」 self-insert-unmeta
^[^M 「ESC」「Ctrl」+「M」 self-insert-unmeta
^[^G 「ESC」「Ctrl」+「G」 send-break
^G 「Ctrl」+「G」 send-break
^@ 「Ctrl」+「@」 set-mark-command
^[\$ 「ESC」「$」 spell-word
^[s 「ESC」「s」 spell-word
^[S 「ESC」「S」 spell-word
^[t 「ESC」「t」 transpose-words
^[T 「ESC」「T」 transpose-words
^_ 「Ctrl」+「_」 undo
^X^U 「Ctrl」+「X」「Ctrl」+「U」 undo
^Xu 「Ctrl」+「X」「u」 undo
^[u 「ESC」「u」 up-case-word
^[U 「ESC」「U」 up-case-word
^[[A 「↑」 up-line-or-history
^[OA 「ESC」「O」「A」 up-line-or-history
^P 「Ctrl」+「P」 up-line-or-history
^X^V 「Ctrl」+「X」「Ctrl」+「V」 vi-cmd-mode
^X^F 「Ctrl」+「X」「Ctrl」+「F」 vi-find-next-char
^[| 「ESC」「|」 vi-goto-column
^X^J 「Ctrl」+「X」「Ctrl」+「J」 vi-join
^X^B 「Ctrl」+「X」「Ctrl」+「B」 vi-match-bracket
^X= 「Ctrl」+「X」「=」 what-cursor-position
^[? 「ESC」「?」 which-command
^Y 「Ctrl」+「Y」 yank
^[y 「ESC」「y」 yank-pop