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のキーバインディングは、あまりいじるとアプリ固有のキーバインディングが食われるのであまりやりたくない派です。