拡張のインストール

VSCodeでvimを使うためには、まずVSCodeの拡張機能である「Vim」をインストールする必要がある。

拡張機能をインストールするには、VSCodeを開いて、左側のメニューバーから「拡張機能」をクリックし、「Vim」を検索してインストールする。

似たような拡張がたくさんあるがpublisherがvscodevimであることと、ダウンロード数の多さを確認する。

vscodevimプラグイン

設定

settings.jsonでVim拡張の設定ができる。
設定項目はvim.から始まるので補完機能で色々と見てみると良い。

手元で使っている設定配下の通り。

{
    // 検索にマッチした箇所をハイライト
    "vim.hlsearch": true,
    // OS のクリップボードと同期
    "vim.useSystemClipboard": true,
    // モードごとにステータスバーの色
    "vim.statusBarColorControl": true,
    "vim.statusBarColors.normal": ["#005f5f", "#fff"],
    "vim.statusBarColors.insert":["#5f0000", "#fff"], 
    "vim.statusBarColors.visual": ["#5f00af", "#fff"],
    "vim.statusBarColors.visualline": ["#005f87", "#fff"],
    "vim.statusBarColors.visualblock": ["#86592d", "#fff"],
    "vim.statusBarColors.replace": ["#000000", "#fff"],
    "vim.statusBarColors.commandlineinprogress": ["#86592d", "#fff"],
    "vim.statusBarColors.searchinprogressmode": ["#86592d", "#fff"],
    "vim.statusBarColors.easymotionmode": ["#86592d", "#fff"],
    "vim.statusBarColors.easymotioninputmode": ["#86592d", "#fff"],
    "vim.statusBarColors.surroundinputmode": ["#86592d", "#fff"],
}

モードごとにステータスバーの色について、ステータスバーとはウインドウ最下部のバーのこと。
vimにはモードがあるので、モードごとにステータスバーの色を変えることで現在のモードがわかりやすくなる。

ステータスバーの色をモードごとに変更する

マルチカーソル

Vim拡張を入れない場合と同様にAlt+クリックでカーソルを追加できる。

ctrl+D(command+D)やctrl+shift+L(command+shift+L)でもカーソルを追加できる。 しかしこの場合はカーソルを追加した時点では「MULTI CURSOR」というモードになっていて編集できない。

まずNORMALモードに戻す必要がある。
MULTI CARSORモードからNORMALモードにするにはEscキーもしくはvキーを入力する。
その状態でwキーなどで移動したり、iキーでinsertモードに入ったりして編集できる。

手順をまとめると以下の通り。

  1. ctrl+Dやctrl+shift+Lなどでカーソルを追加する(→MULTI CURSORモード)
  2. Escキーもしくはvキーを入力する(→NORMALモード)
  3. wキーなどで移動
  4. iキーでinsertモードに入ったりして編集する(→INSERTモード)

マルチカーソル

再びEscキーを入力するとマルチカーソルが解除される。

置換

vimと同様:を入力するとコマンドモードに入る。 コマンドモードからvimと同様のコマンドで置換できる。

ファイル全体から置換

:%s/置換前/置換後/gでファイル全体の置換できる。

:%sはファイル全体を対象にする。
/置換前/置換後/gは置換前の文字列を置換後の文字列に置換する。

visualモードで選択した箇所から置換

visualモードで選択した状態のときに:を入力すると:'<,'>がステータスバーに入力された状態となる。
:'<,'>s/置換前/置換後/gで選択した箇所の置換ができる。
:'<,'>はvisualモードで選択した箇所を対象にする。
/置換前/置換後/gは置換前の文字列を置換後の文字列に置換する。

1件ずつ確認しながら置換

gの代わりにgcとすると置換前の文字列がハイライトされるので確認しながら置換できる。

検索

vimと同様/を入力すると検索モードに入る。 検索モードからvimと同様のコマンドで検索できる。入力する文字列は正規表現が使える。

入力した文字列は検索履歴に残るので、/を入力した後にctrl+nctrl+pや、上下キーで検索履歴を表示できる。

カーソル移動キー(hjklなど)長押しで移動できない(キーリピートしない)場合

Macの場合、キー長押しで繰り返し入力されない場合がある。
jキー長押しで1行しか移動しない。

そのような場合はVSCodeに対してキーリピートが無効となっているので、有効となるように設定する必要がある。

以下のコマンドを実行する。

$ defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false

インサイダービルドを使っている場合は以下のコマンドを実行する。

$ defaults write com.microsoft.VSCodeInsiders ApplePressAndHoldEnabled -bool false

必要に応じてOSを再起動する。

参考: installation > Mac | Vim - Visual Studio Marketplace

surround.vim

vscodevimはsurround.vim の動作もエミュレートしている。

surround.vimの動作を有効にするにはsettings.jsonvim.surroundtrueにする。

{
    "vim.surround": true
}

利用できるキーバインドは以下の通り。

キー説明
y s motion desiredmotionで指定した範囲をdesiredで囲むワードをダブルクオートで囲む: ysiw"
d s existingexistingで指定した囲み文字を削除するダブルクオートの囲みを外す: ds"
c s existing desiredexistingで指定した囲み文字をdesiredで指定した囲み文字に変更するダブルクオートの囲みをシングルクオートの囲みに変更する: cs"'
S desiredVisual Modeで選択した範囲をdesiredで指定した文字で囲むVisual Modeで選択した箇所をダブルクオートで囲む: S"