VSCodeのvimで空行のインデントが解除されないようにしたい

vimVSCodevimでは挿入モードからノーマルモードに移るときに空行のインデントが解除されてしまいます。 具体的には次のとおりです。

  • 挿入モード
some text
    |
    ^カーソル
some text
_
^カーソル

これをツイートしたところ、私のフォロワーが解決方法を教えてくれました。

VSCodevimに特有の挙動かと思ったら、本家のvimでも同じ挙動みたいです。

stackoverflow.com

これによるとvimでは.vimrcに次の通りに書くと空行のインデントが保持されるみたいです。

inoremap <CR> <CR>x<BS>
nnoremap o ox<BS>
nnoremap O Ox<BS>

VSCodevimの場合はsettings.jsonに次の通り書き込むと期待した動作をしてくれました。

    "vim.insertModeKeyBindingsNonRecursive": [
        {
            "before": ["<CR>"],
            "after": ["<CR>", "x", "<BS>"]
        },
    ],
    "vim.normalModeKeyBindingsNonRecursive": [
        {
            "before": ["o"],
            "after": ["o", "x", "<BS>"]
        },
        {
            "before": ["O"],
            "after": ["O", "x", "<BS>"]
        },
    ]

VSCodevimではinoremap"vim.insertModeKeyBindingsNonRecursive"で、nnoremap"vim.normalModeKeyBindingsNonRecursive"で設定できます。

これで快適なコーディングライフが送れます。