以下の記事で「VSCode(Visual Studio Code)」をインストールした。そして、Emacsキー配列で使うようにカスタマイズしたので備忘録を残す。
Emacs配列の場合は、CtrlキーとMetaキーが押しやすい位置にあった方が便利なので、以下の変更をする。
CtrlキーとCapsキーを入れ換えて、Ctrlキーが小指で押しやすい位置に移動する。
Windowsの場合、レジストリを書き換える事でキー配列は変更ができるので、Microsfotが配布していた「Remapkey」というツールを使って変更を行った。尚、このツールは現在では入手できないかもしれないが、同等機能のソフトが色々と出回っているので、どれらを利用してもよい。
Emacsキー操作では、Metaキーとして使われるoptキーが親指で押しやすい位置にあった方が便利なのでcmdキーと入れ替える。Karabiner-Elementsを使って、vscodeでのみキー入れ替えを行う。
以下の「vscode.json
」ファイルを作成し、~/.config/karabiner/assets/complex_modifications/
フォルダに保存。
{ "title": "ALT <=> CMD in VSCode", "rules": [ { "description": "Swap option and command in vscode", "manipulators": [ { "type": "basic", "from": { "key_code": "left_option", "modifiers": { "optional": [ "any" ] } }, "to": [ { "key_code": "left_command" } ], "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "VSCode" ] } ] }, { "type": "basic", "from": { "key_code": "left_command", "modifiers": { "optional": [ "any" ] } }, "to": [ { "key_code": "left_option" } ], "conditions": [ { "type": "frontmost_application_if", "bundle_identifiers": [ "VSCode" ] } ] } ] } ] }
上記設定を、Karabinerで有効にする。
尚、Ctrlキーについては、Mac標準キーボードでは、小指の横に配置されているので変更の必要はないが、もしもWindowsキーボードなどを使っている場合などは、このソフトなどで配列変更する。
CtrlキーとCapsキーを入れ換えて、Ctrlキーが小指で押しやすい位置に移動する。手順は、下記記事を参照。
拡張機能を使ってEmacsキー準拠配列にカスタマイズする。いろいろな拡張機能が公開されているが「Awesome Emacs Keymap」がお勧めでインストールする。
VSCodeでは、様々な拡張機能が準備されている。まずは、Emacsキー配列に変更する拡張機能をインストールする。
サイドメニューの■マークが並んだアイコンをクリック。
検索フォームに「Awesome Emacs Keymap」と入力する。(全部入力しなくてもマッチする一覧がでる)
これで、基本的なEmacsキー操作になる。キー割り当ては、下記URLのドキュメント参照。
あとは、好みのキーバインドを追加する。キーバインドは、keybindings.json
ファイルに記述する事で設定できる。
左下の歯車アイコン(設定)から「キーボードショートカット」を選択。
設定されているキーバインドの一覧が表示される。次に、右上の「キーボードショートカットを開く(JSON)」を押す。
keybindings.json
ファイルの編集画面となるので、キー割り当ての定義を記述する。
以下の定義を追加。
[ { "key": "ctrl+,", "command": "workbench.action.previousEditor", "when": "" }, { "key": "ctrl+.", "command": "workbench.action.nextEditor", "when": "" }, { "key": "ctrl+z ctrl+p", "command": "workbench.action.previousEditor", "when": "" }, { "key": "ctrl+z ctrl+n", "command": "workbench.action.nextEditor", "when": "" }, { "key": "ctrl+z ctrl+a", "command": "cursorTop", "when": "textInputFocus" }, { "key": "ctrl+z ctrl+e", "command": "cursorBottom", "when": "textInputFocus" }, { "key": "ctrl-i", "command": "tab", "when": "editorTextFocus && !editorReadonly && !editorTabMovesFocus" }, // サイドバーのファイラーへ移動(戻る) { "key": "ctrl-z ctrl-o", "command": "workbench.view.explorer" }, ]
以下のキー定義となる。
キー割当て | 説明 | コマンド |
---|---|---|
C-, | 左のタブへ切り換え | workbench.action.previousEditor |
C-. | 右のタブへ切り換え | workbench.action.nextEditor |
C-z C-p | 左のタブへ切り換え | workbench.action.previousEditor |
C-z C-n | 右のタブへ切り換え | workbench.action.nextEditor |
C-z C-a | バッファー先頭に移動 | cursorTop |
C-z C-e | バッファー末尾に移動 | cursorBottom |
C-i | タブ | tab |
C-z C-o | サイドバーのファイラへ移動 | workbench.view.explorer |
C-s
キーでの検索の挙動が違っててストレスだったが、Awesome Emacs KeymapのFAQにも書かれているがEmacsと同様にするには下記の設定を追加する。
"editor.find.seedSearchStringFromSelection": "never",
i-search (C-s) is initialized with the currently selected string and the previous search is removed.This is VSCode's design that an extension cannot control. To disable it, you should set editor.find.seedSearchStringFromSelection VSCode setting as "never". It makes the find widget work similarly to Emacs.
C-s
の動きが近くなって快適になった。あとは、C-s C-w
での検索ワードの取得の挙動を同じにしたい。
Awesome Emacs KeymapのFAQにも書かれているが、ウィジェットは移動キーで閉じますので、検索ウィジット上でのカーソル移動はできない。これは、オリジナルのEmacsの動作を意図された設計です。
尚、C-g
でキーでも検索ウィジットが終了できるが、検索開始したカーソル位置に戻ったりする仕様なので、オリジナルのEmacsとは動きが異なる。カーソル移動で抜け出すように使うようにした方がよい。