はじめに
今更ながら Atomから VSCodeに乗り換えたので、早速 VSCodeVimをインストールし快適なvimライフ(?)を送っていたのですが、いくつかキーバインドに不満があったので設定してみました。
同じような不満を抱えている方の参考になれば幸いです。
Escキーで検索のハイライトを消す
{"vim.normalModeKeyBindingsNonRecursive":[{"before":["<Esc>"],"commands":[":nohl"]}]}
本当はEscキー2回に割り当てたかったのですが、 ["<Esc>", "<Esc>"]
としても反応せず...どなたか分かる方いましたら教えてください。
ちなみに vimrc
では以下に相当します。
nnoremap <ESC><ESC>:nohl<CR>
ビジュアルモードで連続ペーストする
デフォルトの状態ですと、削除された方のテキストがヤンクされてしまうので、貼り付けた側のテキストをヤンクします。
ヤンク自体を防ぐ方法は見つからなかったのですが、貼り付けたテキストを再びヤンクすることで解決できます。
{"vim.visualModeKeyBindingsNonRecursive":[{"before":["p"],"after":["p","g","v","y"]}]}
少しカーソルの動きが変な感じになりますので、気になる方は最後に "e"
も追加して末尾に移動するといいかもしれません。
これで vimrc
でいう以下のような挙動に近づきます。
vnoremap p "_dP
ビジュアルモードのときにTabキーでインデントを調整する
デフォルトの状態ではビジュアルモード時にTabキーが反応せず、複数行をまとめてインデント増減することができなかったので対応します。setting.json
の vim.visualModeKeyBindingsNonRecursive
では Shift+Tab をキーバインドにマッピングする方法が分からなかったので、 keybindings.json
で設定します。
[{"key":"tab","command":"editor.action.indentLines","when":"editorTextFocus && !editorReadonly && vim.active && vim.mode != 'Insert'"},{"key":"shift+tab","command":"editor.action.outdentLines","when":"editorTextFocus && !editorReadonly && vim.active && vim.mode != 'Insert'"}]
vim.active && vim.mode == 'Normal|Insert|Visual'
を使うとだいたいのvimのキーバインドが実現できそうです。
行をまたいで移動する
{"vim.whichwrap":"h,l,<,>,[,],b,s"}
これは vimrc
と同じ書き方ですね。
set whichwrap+=h,l,<,>,[,],b,s
おわりに
私はそこまでvimのキーバインドの設定をいじっていない&使いこなせていないので、これで一旦のところ不満なくVSCodeを使えそうです。
皆さんもおすすめの設定がありましたらコメント等で教えてください。
それでは、良いvimライフを。