VisualStudioCodeではVimのキーバインドで開発ができるように以下のプラグインが提供されています。
・VSCodeVim
https://marketplace.visualstudio.com/items?itemName=vscodevim.vim
こちらのプラグインは、VSCodeのユーザ設定から様々なカスタマイズを行うことができます。
本記事はその中でおすすめな設定を紹介します。
前提知識:ユーザ設定の開き方
VSCode上でF1キーを押下し、
setting.jsonと入力すると、Jsonファイル上でユーザ設定を編集することができます。
おすすめ設定一覧
- OS側とのクリップボードの共有
"vim.useSystemClipboard": true
デフォルト設定では、OS側とプラグインのクリップボードはそれぞれ独立しており、
OS側でコピーしたコード等をpキーで貼り付けることができません。
また、逆にyキーでコピーした文字列をOS側で扱うこともできません。
上記の設定を入れることで、クリップボードが共有され、お互いにコピー&ペーストが可能となります。
- ショートカットキーのカスタマイズ
"vim.handleKeys": {
//以下はVimのショートカットを利用
"<C-d>": true, //下方向へのカーソル移動 ※上方向へのカーソル移動(Ctrl+u)はデフォルト設定でも動作
//以下はVimではなく、Windows側のショートカット
"<C-c>": false, //コピー
"<C-v>": false, //貼り付け ※VisualBlockモードはCtrl+Qで行う
"<C-x>": false, //切り取り
"<C-f>": false, //検索
"<C-a>": false, //全選択
"<C-p>": false //ファイル検索
}
VimのコマンドではCtrl+キーを押下することで、様々な操作を行うことができます。(Ctrl+Aでインクリメント等)
VSCodeVimではほとんどのコマンドをサポートしており、一部を除いてOS側のショートカットよりもVim側のコマンドが優先されます。
しかし、Ctrl+V等、OS側のショートカットを優先して使いたい場合もあると思います。
そのような場合に、上記のオプションで設定を無効化することでOS側のショートカットが優先されます。
- jjでノーマルモードに戻る
"vim.insertModeKeyBindings": [
{
"before": [
"j",
"j"
],
"after": [
"<Esc>"
]
}
]
上記のオプションを適用することで、
Escキー以外にも、jjと入力することでインサートモードからノーマルモードに戻ることができます。
指をホームポジションから動かさずにノーマルモードへ切替できるため便利です。
- 選択状態で貼り付け時、クリップボードの内容が書き換わらないようにする
"vim.visualModeKeyBindingsNonRecursive": [
{
"before": [
"p",
],
"after": [
"\"",
"_",
"d",
"P",
]
}
]
ビジュアルモード等で文字列を選択した際に、pコマンドで貼り付けを行った場合、
クリップボード上の文字列が最初に選択していた文字列へ書き換わってしまいます。
そこで、上記のオプションを適用することで、クリップボードの書き換わりを防ぐことができます。
※
仕組みとしましては、ビジュアルモード中(選択状態中)にpキーを押すことで「"_dp」が実行されるようにしています。
まず、「"_」で消去用のレジスタ(_)が選択されます。
その後dコマンドで文字列の削除が行われ、レジスタ(_)には削除された文字列が送られます。
(ただしレジスタ(_)は消去用の特殊なレジスタのため、文字列の保管は行われません。)
この時、文字列が削除されると同時に選択状態が解除されるため、最後のpコマンドを実行してもクリップボードの内容が書き換わらない仕組みとなっています。