mac OS上のVSCodeのキーバインドについて

更新日2021-09-19
投稿日2021-09-19
タグmac OS, VSCode
投稿者 @amount86

こんばんは。

footlogを開発している@amount86です。


今年の5月に開発用PCを、Ubuntuからmacに買い替えました。

mac OSには、デフォルトでemacsバインドが備わっています。


emacsバインドとは、以下のようなキーバインドです。

矢印キー emacsバインド 備考
C-p(Ctrl + p) previousの「p」
C-n(Ctrl + n) nextの「n」
C-f(Ctrl + f) forwardの「f」
C-b(Ctrl + b) forwardの「f」
home C-a(Ctrl + a) ???
end C-e(Ctrl + e) endの「e」
BacSpace C-h(Ctrl + h) ???
delete C-d(Ctrl + d) deleteの「d」

emacsバインドの何がいいかというと、ホームポジションから離れずにコーディングができることです。


プログラムを書く人間にとって、特に「矢印キー」は多用するキーにも関わらず、デフォルトのバインドだと、一度ホームポジションから離れないと打てません。

ということで、emacsバインドを使ってみようと思い使ってみると、長年使われている理由が分かる、とても癖になるキーバインドでした。



ただし、一つ問題があります。


mac OS標準のメモアプリでは、「Shift + C-f」で「Shift + →」と同じ挙動をして範囲選択できるのですが、VSCodeでは範囲選択することができません。

他にもMetaキーに割り当てられている単語単位の移動も動作しないなど。


色々調べてみると、VSCodeではOSで受け取ったキー入力をそのまま受け取っているわけではなく、VSCode上でキー入力とショートカットがマッピングされているみたいです。


mac OSのVSCodeでは、デフォルトで「cursorRightSelect」に「Shift + C-f」が割り当てられていないことが原因でした。


なので、キーボードショートカット(⌘K ⌘S)を開いて、マッピングをおこなうことで意図した挙動を設定することができますが・・・


特殊なことをすると端末を変えた際の再現性が低いので、emacsバインドの拡張機能(Awesome Emacs Keymap)を導入することで(上述の「Shift + C-f」はそもそも本家emacsのバインドではなかったので再現できなかったのですが)解決しました。


数あるemacsバインドの拡張機能の中からAwesome Emacs Keymapを選んだ理由については、別の記事として投稿する予定です。


みなさんもぜひemacsバインド使ってみてください。