Vim入門

![vim cs.png](https://qiita-image-store.s3.amazonaws.com/0/93548/71547d7d-92a4-5eb5-a92a-7841e4a458d1.png)

# Vimとは？
viから派生した高機能なテキストエディタです。
viはLinuxに標準搭載されているため、使ったことがある人は多いと思います。
大体同じような操作感ですが、viと違うところもあります。

# vimの特徴
 + ストレスの少ないマルチプラットフォーム
 + とにかく軽くて速い
 + 基本的にキーボードだけで操作が可能

# インストール方法
 + Mac/Ubuntu
   + MacとUbuntuには最初からインストールされています。
 + Windows 
   + http://www.kaoriya.net/software/vim/ からダウンロードできます。
 + ローカル開発環境
   + `sudo yum install -y vim` インストールが完了すれば、 vim コマンドを利用できるようになります。

# vimのモードについて
| key       | 内容           |
|---|---|
| ノーマルモード |カーソル移動やテキストの削除、コピー、ペーストなどの簡単な指示を行う。  |
| ビジュアルモード | テキストを選択するだけのモード。 |
| 挿入モード | 実際にテキストを入力するモード。 |
| コマンドラインモード |	ファイルを開いたり、検索・置換などの様々な指示を行う。 |

# モード切り替え
| key       | 内容           |
|-----------|----------------|
| i | 挿入モードへ|
| o | 新しい行を追加し挿入モードへ|
| R | 上書きモードへ|
| v | ビジュアルモードへ|
| V (Shift + v) | 行選択のビジュアルモード|
| Ctrl + v | 矩形選択のビジュアルモードへ|
| ESC | コマンドモードに戻る|
| ctrl + \[ | コマンドモードに戻る|
| ctrl + z | vim を一時停止する|
|ciw|カーソル上の単語を削除してインサートモードへ|

# Vimの保存と終了
| key       | 内容           |
|---|---|
| :w [ファイル名] |指定されたファイル名で保存する。ファイル名を省略した場合には、現在のファイルに上書きする |
| :w! [ファイル名] | 書き込みを強行する |
| ZZ |Vimを終了する。ファイルが変更されている場合には、変更を保存する  |
| :wq | ファイルを保存してVimを終了する |
| :q | Vimを終了する。ファイルに変更がある場合には警告が標示される |
|:q!  |Vimを強制的に終了する。ファイルに変更がある場合は、変更分は無視  |

# カーソル位置を移動
| key       | 内容           |
|-----------|----------------|
|h(または←)  |左に1文字分移動する  |
|j(または↓)  |下に1文字分移動する  |
| k(または↑) |上に1文字分移動する  |
|l(または→) | 右に1文字分移動する |
| Ctrl + d | 半画面分下に移動する |
| Ctrl + u | 半画面分上に移動する |
| gg | ファイルの先頭へ移動する |
| G |ファイルの末尾へ移動する  |
| O |行頭へ移動する  |
| $ | 行末へ移動する |
| w |単語単位で右へ移動する  |
| b | 単語単位で左へ移動する |
|Ctrl + f  | 1画面分下に移動する |
| Ctrl + b | 1画面分上に移動する |
|zz | カーソルが画面中央になるようにスクロール
|Ctrl + o | 古いカーソル位置に戻る。 (Old)|
|Ctrl + i | 新しいカーソル位置に進む。 |

# コピー&ペースト&削除
| key       | 内容           |
|-----------|----------------|
|yy | 今いる行をコピー (yank)|
|p | カーソルの場所に、ペースト|
|yy5p | 現在の行をコピーし、下に5行追加する|
|gv | 直前の選択範囲を再選択|
|x|カーソルの位置にある文字を削除する。キーボードの[Del]と同じ挙動です|
|X|カーソルの位置の左の文字を削除する。キーボードの[BS]と同じ挙動です|
|dd|カーソルのある行を1行削除する|
|D|カーソルのある位置から行末まで削除する|

# 検索と置換

| key       | 内容           |
|-----------|----------------|
| * | カーソル下の単語を検索|
| # | カーソル下の単語を検索 (上方向に検索)|
|:%s/hage/hoge/g | 単語の置換(hageをhogeへ置換)。`%` はファイル全体を表す。|


# 編集

| key       | 内容           |
|-----------|----------------|
|. | 直前の変更を繰り返す|
|u | Undo|
|Ctrl + r | Redo|

# 特殊文字
|key       | 内容           |
|-----------|----------------|
| Ctrl-v return | 改行文字の入力|
| Ctrl-v tab | Tab 文字の入力|

# ウィンドウ

| key       | 内容           |
|-----------|----------------|
|:vsplit | 画面を左右に分割する|
|:sp filename | 新しいバッファと分割ウィンドウでファイルを開く|
|:e filename | 今いるWindowにファイルを開く (Edit)|
|:e test\*.cc | ワイルドカードを指定してファイルを開く|
|Ctrl +w h | 左のWindowへ移動|
|Ctrl + w l | 右のWindowへ移動|

# バッファ

| key       | 内容           |
|-----------|----------------|
|:buffers | 編集中のバッファ一覧を表示|
|:bn | 次のバッファに移動|
|:bd[elete] | バッファを削除|

# 単語補完

| key       | 内容           |
|-----------|----------------|
|Ctrl + p | 単語補完(前方検索)|
|Ctrl + n | 単語補完(後方検索)|

# マクロ

| key       | 内容           |
|-----------|----------------|
|q\<letter\> | マクロの記録開始 |
|q           | マクロの記録停止 |
|@\<letter\> | マクロの実行     |

# レジスタ

| key | 機能 |
|-------|-------|
| :reg | レジスタの一覧表示 |
| Ctrl + r " | ヤンクした文字列をペースト |

# コマンドの意味

| key       | 意味           |
|-----------|----------------|
| g | 繰り返し |
| c | 1回毎に確認 |

# その他

| key       | 内容           |
|-----------|----------------|
|:!command | 外部コマンドの実行|
|: | 範囲選択中に `:` を入力すると、選択領域の範囲指定( `’<,’>` )が自動で挿入された状態でコマンドモードに入る。これを置換に利用すると便利。 (例: :'<,'>s/old/new/g)|
|Ctrl + a | 数値のインクリメント|
|Ctrl + x | 数値のデクリメント|

[Interactive Vim tutorial](https://www.openvim.com/)
[Learning VIM while playing a game](https://vim-adventures.com/)