動機
- うろ覚え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
の挙動はこんな感じになる
let E_HOGE_INVALID_ARGS = 1
//<-----------------------------------この位置からCtrl-yを押すと
let E_HOGE_INVALID_ARGS = 1
let E_HOGE_INVALID_//<----------------異なる部分まで繰り返す
let E_HOGE_INVALID_ARGS = 1
let E_HOGE_INVALID_TIME = 2 //<-------残りはそのままキー入力で記述
行コピーを利用しても良いんだが、変更箇所の部分まで移動して、INSERT MODEにして、またNORMAL MODEに戻して移動して……というのが地味にツライ。
(カーソルキーとDeleteキーを併用すれば1回のINSERT MODEでいけるけどポジショニングが悪くなるので微妙)
編集編
キー入力 | モード | 動き |
---|---|---|
u |
VISUAL | 選択領域の英字をすべて小文字化 |
U |
VISUAL | 選択領域の英字をすべて大文字化 |
S<t> |
VISUAL | 選択領域の前後を文字で囲む。サラウンド入力 |
~ |
NORMAL | カーソル位置の英字の大文字小文字反転して次に進む。 VISUAL MODE時にも使用できる |
x |
NORMAL | カーソル位置の文字を削除(Delete) |
r |
NORMAL | カーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る |
u |
NORMAL | Undo |
Ctrl-r |
NORMAL | Redo |
ds<t> |
NORMAL | 文字で囲まれている領域のだけ削除する。サラウンド削除 |
VISUAL MODEでのS<t>
は意外とややこしい。とりあえず、手段は色々ありますが、わかりやすいのは対象の領域をVISUAL MODEで選択し、S
を入力した後に、囲みたい文字を入れる手順。
例えば、マークダウンで「`」で囲みたい時なんかこれを使うと楽になる。
サラウンド削除するためのds<t>
コマンドがたまに効かなくなるのが辛い…。