動機
- うろ覚えvi使いの自分が最近Codeを使う関係上、VSCodeVimの挙動を理解しておく必要があった
- 本当はPureなViの便利コマンドとかも覚えたいけど、Code上で使えないと混乱するのでCode で使えるもののみメモしておこうと思った。
注意事項
VSCodeのステータスバーに出るモード表示が、一般のVimと異なるので対応表をつけておく。
Code+Vim | Vim |
---|---|
NORMAL MODE | コマンドモード |
INSERT MODE | 挿入モード |
REPLACE | 上書きモード |
VISUAL MODE | ビジュアルモード |
また、日本語入力状態のままNORMAL MODEに戻ると、NORMAL MODE時のコマンドが
入力できないので、日本語入力モードをOFFにする必要がある。
したがって、オフィスはWindows、家ではMacを使っているので日本語入力ON/OFFキーの
位置が異なる為、たまに困る。
苦肉の策としてはせめてWindowsとMacで同じようなキー操作感にする為、Windowsの
OSレベルでのキーバインド編集で「スペースキー」左にある「無変換」を「IMEオフ」に
なるよう設定する。
モード切替編
困ったらEsc
キーを押すとよい。
キー入力 | モード | 動き |
---|---|---|
Esc | すべて | NORMAL MODEへ遷移 |
i | NORMAL | カーソル位置からINSERT MODEに遷移 |
I | NORMAL | 行頭からINSERT MODEに遷移 |
a | NORMAL | カーソルの次位置からINSERT MODEに遷移 |
A | NORMAL | 行末からINSERT MODEに遷移 |
R | NORMAL | カーソル位置からREPLACEに遷移 |
s | NORMAL | カーソル位置の文字を削除すると同時にINSERT MODEに遷移 |
移動編
キー入力 | モード | 動き |
---|---|---|
j , k ,h or l | NORMAL | カーソル移動。それぞれの文字が「↓↑←→」に対応 |
nj | NORMAL | n行↓に移動(他k ,h ,l キーも同様)(nは数字です |
^ | NORMAL | 行頭に移動 |
$ | NORMAL | 行末に移動 |
gg | NORMAL | 先頭行へ移動 |
G | NORMAL | 最終行へ移動 |
nG | NORMAL | n行目に移動(nは数字です) |
Ctrl-f | NORMAL | 1画面分下に移動 |
Ctrl-b | NORMAL | 1画面分上に移動 |
Ctrl-e | NORMAL | 画面の下スクロール |
Ctrl-y | NORMAL | 画面の上スクロール |
入力編
特にCtrl-e
, Ctrl-y
は機能は知っていても、欲しいときに思い出せないという
ジレンマを味わうこと過去多数。今度こそ覚えた!
キー入力 | モード | 動き |
---|---|---|
Ctrl-e | INSERT | 真下の文字と同じものが入力される |
Ctrl-y | INSERT | 真上の文字と同じものが入力される |
Ctrl-h | INSERT | バックスペース |
Ctrl-w | INSERT | 単語レベルでのバックスペース |
Ctrl-e
, Ctrl-y
の挙動はこんな感じになる
letE_HOGE_INVALID_ARGS=1//<-----------------------------------この位置からCtrl-yを押すと
letE_HOGE_INVALID_ARGS=1letE_HOGE_INVALID_//<----------------異なる部分まで繰り返す
letE_HOGE_INVALID_ARGS=1letE_HOGE_INVALID_TIME=2//<-------残りはそのままキー入力で記述
行コピーを利用しても良いんだが、変更箇所の部分まで移動して、INSERT MODEにして、またNORMAL MODEに戻して移動して……というのが地味にツライ。
(カーソルキーとDeleteキーを併用すれば1回のINSERT MODEでいけるけどポジショニングが悪くなるので微妙)
編集編
キー入力 | モード | 動き |
---|---|---|
u | VISUAL | 選択領域の英字をすべて小文字化 |
U | VISUAL | 選択領域の英字をすべて大文字化 |
~ | NORMAL | カーソル位置の英字の大文字小文字反転して次に進む。 VISUAL MODE時にも使用できる |
x | NORMAL | カーソル位置の文字を削除(Delete) |
r | NORMAL | カーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る |
u | NORMAL | Undo |
Ctrl-r | NORMAL | Redo |