1. kuroyakov

    Posted

    kuroyakov
Changes in title
+Visual Studio Codeの機能拡張「Vim」の為のメモ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,105 @@
+動機
+==================================================
+* うろ覚え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`の挙動はこんな感じになる
+
+```fsharp
+let E_HOGE_INVALID_ARGS = 1
+//<-----------------------------------この位置からCtrl-yを押すと
+```
+
+```fsharp
+let E_HOGE_INVALID_ARGS = 1
+let E_HOGE_INVALID_//<----------------異なる部分まで繰り返す
+```
+
+```fsharp
+let E_HOGE_INVALID_ARGS = 1
+let E_HOGE_INVALID_TIME = 2 //<-------残りはそのままキー入力で記述
+```
+
+行コピーを利用しても良いんだが、変更箇所の部分まで移動して、INSERT MODEにして、またNORMAL MODEに戻して移動して……というのが地味にツライ。
+(カーソルキーとDeleteキーを併用すれば1回のINSERT MODEでいけるけどポジショニングが悪くなるので微妙)
+
+編集編
+==================================================
+
+キー入力 | モード | 動き
+---------|---------|-------------------------
+`u` | VISUAL | 選択領域の英字をすべて小文字化
+`U` | VISUAL | 選択領域の英字をすべて大文字化
+`~` | NORMAL | カーソル位置の英字の大文字小文字反転して次に進む。<br>VISUAL MODE時にも使用できる
+`x` | NORMAL | カーソル位置の文字を削除(Delete)
+`r` | NORMAL | カーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る
+`u` | NORMAL | Undo
+`Ctrl-r` | NORMAL | Redo