1. kuroyakov

    No comment

    kuroyakov
Changes in body
Source | HTML | Preview
@@ -1,105 +1,112 @@
動機
==================================================
* うろ覚え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 | 選択領域の英字をすべて大文字化
+`S<t>` | VISUAL | 選択領域の前後を<t>文字で囲む。サラウンド入力
`~` | NORMAL | カーソル位置の英字の大文字小文字反転して次に進む。<br>VISUAL MODE時にも使用できる
`x` | NORMAL | カーソル位置の文字を削除(Delete)
`r` | NORMAL | カーソル位置の1文字だけ置換するモードに変わり置換後はNORMAL MODEに戻る
`u` | NORMAL | Undo
`Ctrl-r` | NORMAL | Redo
+`ds<t>` | NORMAL | <t>文字で囲まれている領域の<t>だけ削除する。サラウンド削除
+
+VISUALモードでの`S<t>`は意外とややこしい。とりあえず、手段は色々ありますが、わかりやすいのは対象の領域をVISUALモードで選択し、`S`を入力した後に、囲みたい文字を入れる手順。
+例えば、マークダウンで```で囲みたい時なんかこれを使うと楽になる。
+
+サラウンド削除するための`ds<t>`コマンドがたまに効かなくなるのが辛い…。