Visual Studio Codeをemacs風 (時々Windows風) に使う

長年Windows上ではxyzzyで生活してきたが、更新が止まって6年以上ということもありさすがに苦しくなってきた。今風の開発をしようとすると、今風のエディタが欲しくなる。そこで、Visual Studio Codeに宗旨変えすることとした。Visual Studio Codeは完成度の高いエディタで、今風の開発に必要なものはすべて揃っている。動作も軽快な部類で文句の付け所がない。

しかしながら、さすがにキーバインディングだけはemacs風にしないと生活できない。同じ病を抱えた人が多数いるため、さまざまなextentionが公開されている。とりあえず評判の良さそうなAwesome Emacs Keymapを導入することにした。まだ使い始めて日が浅いが、大きな問題はなさそうだ。

ここで恥を忍んでお話すると、実はemacsのキーバインディング100%で生活しているわけではなく、undo, cut, copy, pasteだけはWindows風のショートカットを好んで使用している。こればかりは他のアプリケーションとの兼ね合いもあり、どうしても必要だ。xyzzyではこの部分をうまくサポートしてくれるwinkeyを使用していた。

Visual Studio CodeとAwesome Emacs Keymapの組み合わせでは、デフォルトでもC-z, C-cは期待通りに動作してくれる。Windows上ではsuspend-frameは使わないし、ユーザ用に予約済みのキーバインディングを借用しても問題ない。

ところが、C-vはscroll-up-commandに割り当てられているので、これを明示的に殺す必要がある。Happy Hacking KeyboardではPg Up/Dnが便利な場所にあるので普段はそちらを使用しており、C-vを殺しても不便がない。これには、Keyboard Shortcutsの設定から削除するか、keybindings.jsonに以下を追記すれば良い。

{
    "key": "ctrl+v",
    "command": "-emacs-mcx.scrollUpCommand",
    "when": "editorTextFocus && !suggestWidgetVisible"
}

もう一つの問題はC-xで、Prefix Keyとしてあまりに広く使われているため、C-vのようにそのまま殺すわけにはいかない。そこで一工夫し、テキストが選択されている場合のみcutとして動作し、その他の場合はemacs用のprefix keyとして動作させる。そのためには、keybindings.jsonに以下を追記すれば良い。

{
    "key": "ctrl+x",
    "command": "editor.action.clipboardCutAction",
    "when": "editorHasSelection"
}

コメント

タイトルとURLをコピーしました