Visual Studio Codeのキーカスタマイズ

VisualStudioCodeのWindows版を,ほんの少しだけemacs風にキーカスタマイズする話です.

今まで,Windows版の Danaテキストエディタ を,右手をホームポジションからあまり動かさなくてもすむように,少しemacs風にカスタマイズして使っていました.(正確には,X68000のμEmacs風)

要するに,カーソルキーやBackspace,Delキーを押さなくてすむようにしていました.

今回,諸事情によりVisual Studio Code (以下VSCode)を使うことにしたのですが,それでも同じように使えるようにキーをカスタマイズしましたので,
その設定を書いてみます.Windows版の想定です.

なお,本当にemacs風に使いたい人は,別のを使うのが良いと思います.このページは,あくまで自分でほんの少しだけカスタマイズしようというレベルの話です.

また,デフォルトで割り当てられてたがこの設定をすると使えなくなる,という機能が多数あると思います(特にctrl+kからの2ストロークに割り当てられた機能群).
なので,適当に使えそうなものだけ拾っていただく程度がよろしいかと.

カーソル移動:上下左右

{
"key": "ctrl+p",
"command": "cursorUp",
"when": "textInputFocus"
},
{
"key": "ctrl+n",
"command": "cursorDown",
"when": "textInputFocus"
},
{
"key": "ctrl+f",
"command": "cursorRight",
"when": "textInputFocus"
},
{
"key": "ctrl+b",
"command": "cursorLeft",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+p",
"command": "cursorUpSelect",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+n",
"command": "cursorDownSelect",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+f",
"command": "cursorRightSelect",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+b",
"command": "cursorLeftSelect",
"when": "textInputFocus"
},

shift併用で,選択範囲を指定しながら移動します.

Danaには「範囲選択を開始する」という機能があって,それをキーに割り当てれば良かったのですが,VSCodeではそれができるかどうかわからなかったので,Shift併用の操作にしています.

カーソル移動:ページ上下

{
"key": "ctrl+z",
"command": "cursorPageUp",
"when": "textInputFocus"
},
{
"key": "ctrl+v",
"command": "cursorPageDown",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+z",
"command": "cursorPageUpSelect",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+v",
"command": "cursorPageDownSelect",
"when": "textInputFocus"
},

カーソル移動:その行の先頭/末尾

{
"key": "ctrl+a",
"command": "cursorHome",
"when": "textInputFocus"
},
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+a",
"command": "cursorHomeSelect",
"when": "textInputFocus"
},
{
"key": "ctrl+shift+e",
"command": "cursorEndSelect",
"when": "textInputFocus"
},

編集

{
"key": "ctrl+o",
"command": "editor.action.insertLineBefore",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "ctrl+d",
"command": "deleteRight",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "ctrl+h",
"command": "deleteLeft",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "ctrl+k",
"command": "deleteAllRight",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "ctrl+u",
"command": "deleteAllLeft",
"when": "textInputFocus && !editorReadonly"
},

ctrl+oは,現在行に空行を挿入.ctrl+kは,カーソル位置からその行の末尾まで削除.ctrl+uは,カーソル位置からその行の先頭まで削除.
なお,ctrl+kはVSCodeのデフォルトで2ストロークキーの最初のキーに割り当てられているので,
この設定をすると多くの機能が使えなくなります.自分はそれで構わないのでそうしていますが,ご注意ください.

マルチカーソル

{
"key": "ctrl+alt+n",
"command": "editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+p",
"command": "editor.action.insertCursorAbove",
"when": "editorTextFocus"
},

emacsとは関係ないのですが,上下へのマルチカーソル開始をctrl+n, ctrl+pによる上下移動に合わせた感じで設定しています.
マルチカーソルはSublime Text2で使い始めたのですが,便利なので外せません.

その他

{
"key": "f5",
"command": "actions.find",
"when": ""
},
{
"key": "alt+u",
"command": "undo",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "alt+shift+u",
"command": "redo",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "ctrl+y",
"command": "editor.action.clipboardPasteAction",
"when": "textInputFocus && !editorReadonly"
},

元々のやりたいこととはあまり関係ないのですが,ctrl+zを使ってしまったのでundoを他のキーに割り当てて,
また,ctrl+fやctrl+vも元々の機能を別のキーに割り当てるなど.