← 戻る

VSCodeのVimでCtrl+mで改行したときにインデントがおかしい問題

*nix系のターミナルでの作業に慣れている人だと、改行させたい場合にEnterキーじゃなくてCtrl+mを使う人が多いと思います。右手をEnterキーまで動かす必要が無いので作業が速くなるし楽です。

しかし、その感覚のままVSCodeのVim拡張を有効化して作業するとイラッと来るのが、挿入モード時のCtrl+mの挙動です。例えば、

const hoge = {

まで書いてCtrl+mを押したら、以下のようになってほしいはずです。(インデントがスペース4個の場合)

const hoge = { // <-ここにカーソルが来てほしい }

しかし、実際には以下のようになってしまいます。

const hoge = { // <- ここにカーソルが来てしまう }

毎回Tabキーを押してインデントを合わせるのはだるいです。オートフォーマットがあるじゃないかと一瞬思いましたが、インデントのために毎回セーブするのもだるいです。

これを解決するために、Ctrl+mをEnterにマップしました。settings.jsonに以下のように書きます。

{ // ...省略 "vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-m>"], "after": ["<Enter>"] } ], }

これでめでたく期待通りの動きをするようになりました。

ホストOSの方ですでにCtrl+mをEnterの挙動にマップしている場合はもしかしたら不要かもしれません。ホストOSのキーバインディングは、あまりいじるとアプリ固有のキーバインディングが食われるのであまりやりたくない派です。