VSCodeのキーバインドで「Ctrl-m」を改行にしたかったが、一手間必要だった話。
環境:macOS Monterey、VSCode 1.63.2
追記:エクステンション必要なく簡単にできた(ref. Windows-アプリケーション/VSCode/キーバインディング/CTRL-Mで改行 - yanor.net/wiki)、 悩んだのはなんだったんだ…
{ |
前口上
改行の入力にreturn(enter)キーを使うのは、ホームポジションから手が離れてしまうのでできれば避けたい。 以前はemacsを使用していたというのと、macのターミナルでもCtrl-mで受け付けるので同じにしたい。
エクステンションでemacsバインディングにできるものもあるが、コピー&ペーストなどの機能はOS標準で使いたかったので、使わないことにした。 キーバインディングで設定できるかと思ったが、そのままではできなかった。
VSCodeのキーバインディング設定
VSCodeでキーバインディングの設定をするにはメニューのPreferences > Keyboard Shortcutsを選んだり、 Shift-Command-pでコマンドパレットから”keyboard”と入力して「Preferences: Open Keyboard Shortcuts」を選ぶなどで開ける。
キーバインディングの編集方法
開いた「Keyboard Shortcuts」は表形式になっていて、設定を検索したりインタラクティブにショートカットキーを設定したりできる。
またそのペイン右上に表示されるアイコン(Open Keyboard Shortcuts (JSON))のクリックで、JSONファイル(keybindings.json)での表示や変更ができる。
使えそうだったコマンド
ショートカットキーはコマンドに対して割り当てるので、どんなコマンドがあるかと、そのコマンド名を知る必要がある。 どういうコマンドがあるのか、一覧をどこで見れるのか、というのはちょっとわからなかったが、 使えそうだった(だけどちょっと違った)ものを少し記述する:
lineBreakInsert
lineBreakInsert
コマンドで改行の挿入ができる:
{ |
これがそのまま使えるかと思ったが、改行をいれるだけでカーソル位置が移動しなかった。
insertLineAfter
Visual Studio CodeでCtrl+MをEnterに割り当てる方法が分からない - ゲームが作れるようになるまでがんばる日記 を見て、
insertLineAfter
コマンドが使えそう:
{ |
一見うまく動くんだけど行の途中で入力した場合に、その位置に改行挿入で以降が次の行になるんではなく、単に下に新しい行が挿入されてしまう。
解決した方法
標準で return キー入力と同じ動作のコマンドはない?ようなので、別の方法を使う必要があった。 手順は以下の通り:
- 【VSCode】複数のコマンドを一つのキーで実行したい - Qiita に書かれている multi-command というVSCodeのエクステンションを入れる
- 設定ファイル settings.json に複数コマンドの定義を追加:(コマンド名は
insertCarriageReturn
とした)
{ |
- keybindings.json にマルチコマンドを指定する:
{ |
これで望みの動作になりました…やりたいことは単純なのにすんなりいかんな…という印象。