VSCodeのvimで空行のインデントが解除されないようにしたい
vimやVSCodeのvimでは挿入モードからノーマルモードに移るときに空行のインデントが解除されてしまいます。 具体的には次のとおりです。
- 挿入モード
some text | ^カーソル
some text _ ^カーソル
これをツイートしたところ、私のフォロワーが解決方法を教えてくれました。
vscodeのvimのキーバインドで挿入モードからノーマルモードに移ったときにインデントが解除されるやつやめてほしい。
— あずりえる🌸 (@poyothon) 2021年7月26日
VSCodeのVimキーバインドの設定がどんだけ作り込めるかわからないですが、素のvimでいうと
— SND (@comeonsindy) 2021年7月26日
inoremap <CR> <CR>x<BS>
nnoremap o ox<BS>
nnoremap O Ox<BS>
が設定できると改善できそうです
(いずれも、改行+1文字入力+1文字削除とすることでインデント消えるのを防ぐ)https://t.co/Q7pTSSzJ2E
VSCodeのvimに特有の挙動かと思ったら、本家のvimでも同じ挙動みたいです。
これによるとvimでは.vimrc
に次の通りに書くと空行のインデントが保持されるみたいです。
inoremap <CR> <CR>x<BS> nnoremap o ox<BS> nnoremap O Ox<BS>
VSCodeのvimの場合はsettings.json
に次の通り書き込むと期待した動作をしてくれました。
"vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<CR>"], "after": ["<CR>", "x", "<BS>"] }, ], "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["o"], "after": ["o", "x", "<BS>"] }, { "before": ["O"], "after": ["O", "x", "<BS>"] }, ]
VSCodeのvimではinoremap
は"vim.insertModeKeyBindingsNonRecursive"
で、nnoremap
は"vim.normalModeKeyBindingsNonRecursive"
で設定できます。
これで快適なコーディングライフが送れます。