Vimのコマンド（自分用のメモ書き）

# はじめに
数年前にLinux系のお仕事でvimを触ったおかげでvimが好きなった。
ピアノのようにキーを奏でられるところが好き。
しばしば使うコマンドを、しばしば忘れる。
vimのhelpに全て記載されているが、vscodeにてvimのキーバインドを使用しているので、気軽にヘルプがみれない。
だから、メモをQiita上に残して見れるようにしておく。
## 参考書籍
著者が喜ぶので、書籍を購入することをお勧めする。
Kindleで購入してしまったので、少し後悔。
老眼進行中なので、スマホで読むのがしんどい。
* [テキストエディタvimショートカットガイド](https://www.tenkaiken.com/%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFvim%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89/)
* [実践Vim 思考のスピードで編集しよう！](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Vim-%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86-Drew-Neil/dp/4048916599)
## モードの遷移
Vimには4つのモードがある。
* ノーマルモード
* ビジュアルモード
* 挿入モード
* コマンドモード
## カーソル移動
|コマンド|作用|
|---|---|
|h j k l|左上下右に移動|
|enter|下の行の先頭文字に移動|
|w|次の単語に移動|
|b|前の単語に移動|
|e|単語の末尾に移動|
|$|行末に移動|
|0|行頭に移動|
|^|行の先頭文字に移動|
|%|対応するカッコに移動|
|H M L|画面の最上・中央・最下行に移動|
## 文字入力
|コマンド|作用|
|---|---|
|i hoge ESC|カーソル位置にhogeを挿入|
|a hoge ESC|カーソル位置の後ろにhogeを挿入|
|o hoge ESC|次行に行を追加してhogeを挿入|
|O hoge ESC|前行に行を追加してhogeを挿入|
|I hoge ESC|空白を覗く行頭からhogeを挿入|
|A hoge ESC|行末からhogeを挿入|
|R hoge ESC|カーソル位置からhogeを上書き|
## スクロール・ジャンプ
|コマンド|作用|
|---|---|
|Ctrl＋u|半画面上スクロール|
|Ctrl＋d|半画面下スクロール|
|Ctrl＋b|画面上スクロール|
|Ctrl＋f|画面下スクロール|
|Ctrl＋y|1行上スクロール|
|Ctrl＋e|1行下スクロール|
|zz|現在行を画面中央行へスクロール|
|z|現在行を画面最上行へスクロール|
|G|ファイル最終行にジャンプ|
|1G|行番号1にジャンプ|
|200G|行番号200にジャンプ|
|gg|先頭行にジャンプ|
## 削除・カット・コピー
|コマンド|作用|
|---|---|
|x|カーソル位置の文字を削除|
|dw|単語を削除|
|dd|行を削除|
|d0|行から現在位置まで削除|
|d$|現在位置から行末まで削除|
|yw|単語をコピー|
|yy|行をコピー|
|y0|行頭から現在位置までコピー|
|y$|現在位置から行末までコピー|
|p|挿入貼り付け|
|cw hoge|現在位置の単語をhogeに書き換え|
|rA|カーソル位置の文字をAに置き換え|
## その他編集操作
|コマンド|作用|
|---|---|
|J|現在行と次行を連結|
|~|カーソル位置の文字をUpper⇔Lowerに変換|
|u|UNDO|
|ctrl+r|REDO|
|.|直前のコマンドを再実行|
|>>|カーソル行を右にインデント|
|<<|カーソル行を左にインデント|
## 選択範囲の操作
|コマンド|作用|
|---|---|
|v|ビジュアルモードに変更|
|d|選択範囲をカット|
|x|選択範囲をカット|
|y|選択範囲をコピー|
|>|選択範囲を右インデント|
|<|選択範囲を右インデント|
|Ctrl+v|矩形範囲の選択|
|Shift+v|行単位の選択|
## 検索・置換
|コマンド|作用|
|---|---|
|/hoge|文字列hogeを前方向に検索|
|/|同じ文字列を検索|
|?hoge|文字列を後方向に検索|
|?|同じ文字列を後方向に検索|
|*|カーソル位置の単語を前方向に検索|
|#|カーソル位置の単語を後方向に検索|
|:%s/hoge/abec/g|文字列hogeをabecに一括置換|
|:%s/hoge/abec/gc|文字列hogeをabecに確認しながら置換|
|4,9s/hoge/abec/g|4～9行目のhogeをabecに一括置換|
|.,$s/hoge/abec/g|現在行～最終行目のhogeをabecに一括置換|
|g/hoge/d|hogeを含む行を削除|
|g!/hoge/d|hogeを含む行を削除|
|:noh|検索結果のハイライト表示を消す|
## 分割画面
|コマンド|作用|
|---|---|
|:sp enter|画面を上下に分割|
|ctrl + w j|分割画面の下に移動|
|ctrl + w k|分割画面を移動|
|ctrl + w 10+|現在分割画面の範囲を10行増やす|
|ctrl + w 10-|現在分割画面の範囲を10行減らす|
|:new filename enter|画面分割して「filename」を開く|
## マーク・マクロ
|コマンド|作用|
|---|---|
|mA|現在行をマークAに記録する|
|`A|マークAに記憶した行にジャンプする|
|qA 任意の操作 q|マクロAにキー操作を記録する|
|@A|マクロAを再現する|
## ファイル
|コマンド|作用|
|---|---|
|:w filename enter|指定したfilenameでファイル保存|
|:w|上書き保存|
|:wq|上書き保存＆終了|
|:q|終了|
|:q!|強制的に終了|
|:n|次のファイルに進む|
|:N|前のファイルに進む|
|:e filename enter|現在のファイルを終了し、別のファイルを編集|
|ctrl + g|編集中のファイル名と行位置を表示|
|:pwd|現在のディレクトリパスを表示|
## 設定 ※vim用の設定なのでvscodeで同じように動作するか未検証
|コマンド|作用|
|---|---|
|:set number|行番号を表示|
|:set nonumber|行番号を非表示|
|:set autoindent|オートインデント|
|:set ts=4|タブの空白数を4に設定|
|:set sw=4|インデントの空白数を4に設定|
|:set nolist|タブ文字・行末を可視化|
|:set tw=80|折り返し行数を80文字に設定|
|:set enc=utf-8|文字コードをUTF-8に設定|
|:set ff=unix|文字コードをUNIX式に設定|
|:syntax on|文字解釈し色分け表示|
|:set hlsearch|検索一致箇所をハイライト表示|