今回は、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」キーから近くて押しやすいからだと言われている。現在ではこの組み合わせのショートカットキーが広く使われており、デファクトスタンダートと言ってよいだろう。
一方、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 |
