PC＆プログラミング初心者が初めて覚えるVim 50選！+plus2

普段馴染みのあるフォルダやアイコンなどの図形が表示されているのは**GUI**と呼ばれていますが、プログラマーがマウスを使用せずに「コマンド」と呼ばれる文字列を入力している画面が**CUI**です。　　

そして、**CUIで動かすのが前提**のテキストディタ―にVimがあります。
## Vimを使う前に知っておくべきコマンド
Vimはターミナルから起動します。ところがPC初心者はターミナルを起動させることはできても、ターミナルの終了方法を分かりません。

::: note 
《参考》ターミナルの起動方法　　
Windowsの場合は左下の検索にターミナルを入力すればアプリを選択できる![ターミナル画像-ブログ用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3439948/ce47df74-aa72-4a98-ff45-b8efcf89c047.png)
:::

<table>
  <thead>
    <tr>
      <th>ターミナルの終了コマンド</th>
    </tr>
  </thead>
  <tr>
    <td>ターミナルは【exit】を入力し、【enter】キーを押すと終了できます！  </td>
  </tr>
</table>

## Vimを起動する前に 

1）ターミナルを起動　　

2）`cd`コマンドで作業したいディレクトリ(フォルダ)へ移動する

:::note
例）`cd 飛鳥`
:::  


## 最初に覚えるべきVimのコマンド  

### Vimの起動 

|番号|コマンド|意味|
|:--:|:--:|:--|
|①|`vim`|Vimの起動|　　

### Vimのモード　　

|番号|出し方|モード|用途例|
|:--:|:--:|:--:|:--|
|②|`Esc`|Normal|コマンドモード|
|③|`Esc`→`i`|Insert|文字編集|
|④|`Esc`→`v`|Visual|文字選択|

### Vimの終了 

|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑤|`:w`|ファイルを保存|Normal|
|⑥|`:q`|実行中のタブを閉じる|Normal|
|⑦|`:x`または`:wq`|編集した内容を保存して終了|Normal|
|⑧|`:q!`|編集した内容を保存せずに終了|Normal|　　

:::note  
例えば、⑧の「編集した内容を保存せずに終了」したいときは`Esc`でNormalモードにし、`:q!`を入力して`Enter`キーを押すとVimを終了できる。
:::  

### 既存ファイルを開く・新規作成  
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑨|`e ファイル名.拡張子`|既存ファイルを開く。|Normal|
|⑩|`:w 飛鳥.html`|ファイルに名前を付けて保存|Normal|
|⑪|`vim ファイル名.拡張子`|Vimの起動と同時に新規ファイルを開く。|ターミナル|

:::note  
⑩は①でVimを起動してから【Normal】モードでファイル名を付けるのに対して、⑪はターミナルでVimを起動する際に、予めファイル名を付ける。例）`vim 飛鳥.txt`
:::  

### 文字の削除とやり直し  
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑫|x|1文字削除|Normal|
|⑬|u|やり直し(最後のコマンド取り消し)|Normal|
|⑭|`ctrl`+`R`|やり直しのやり直し(取り消したのを取り消し)|Normal|

::: note
《他の削除例》
|コマンド|削除|モード|
|:--:|:--|:--:|
|D|カーソル位置から行末まで削除|Normal|
|S|1行削除して、挿入モード|Normal→Insert|
|●cc|●行削除して、挿入モード|Normal→Insert|
|`v`+`k`(又は`j`)+`x`|ビジュアルモード後に上又は下カーソルで範囲指定して削除|Normal→Visual|
:::

### コピー＆貼付  
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑮|`v`+`l`+`y`|ビジュアルモード後に範囲選択してコピー|Normal→Visual|
|⑯|●yy|●列コピー|Normal|
|⑰|p|ペースト|Normal|

::: note
`x`や`dd`で削除した文字を`p`でペーストすることもできる
:::

### 選択
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑱|ggVG|すべて選択|Normal|


## 次に覚えるべきVimのコマンド 
### 外部コマンドを実行
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|⑲|`:!`+ `外部コマンド`+`enter`|外部コマンドの実行|Normal|
|⑳|`!dir` 又は `:!ls`+`enter`|ディレクトリ一覧|Normal|
|㉑|`:!del`+ `ファイル名.拡張子`+`enter`|ファイルを削除|Normal|  

:::note
全ての `:コマンド`は `enter`を押して終了しよう！
:::

## おいおい覚えるVimのコマンド  
※使っているうちに覚えるだろうコマンド
### 検索　　
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|㉒|`(`,`[`,`{`の位置に`%`|対応する `)`,`]`,`}` を検索|Normal|
|㉓|`/`+`検索したい文字列`|文字列を検索|Normal|
|㉔|n|[/]で検索した文字列の次の検索候補に飛ぶ|Normal|
|㉕|N|[/]で検索した文字列の前の検索候補に飛ぶ|Normal|

### ㉖合致するすべてを強調表示する
1. Normalモードで`:set hls`と入力
1. `/検索したい文字`を入力
1. `:nohls`で強調表示をやめる

### 置換　　
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|㉗|~|カーソル直下の文字の大文字小文字を切り替える|Normal|
|㉘|`v`+ 範囲選択 + `U`|ビジュアルモード後に選択した範囲の大文字小文字の切替|Normal→Visual|
|㉙|`:s/old/new`|今いる行の最初の「old」を「new」に置換|Normal|
|㉚|`:s/old/new/g`|行全体の「old」 を「new」 に置換|Normal|
|㉛|`:1,30s/old/new/g`|1～30行目の範囲にある「old」を「new」へ置換|Normal|
|㉜|`:%s/old/new/g`|ファイル全体で見つかるものに対して置換|Normal|
|㉝|`:%s/old/new/gc`|ファイル全体で見つかるものに対して、1つ1つ確認をとりながら置換|Normal|

|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|㉞|`o`|今いる行の1つ下の行が開き、Insert|Normal→Insert|
|㉟|`O`|今いる行の1つ上の行が開き、Insert|Normal→Insert|


### ㊱あるファイルの特定行を別ファイルに保存
1. `v` で特定の行を選択
1. `:`を押して`:'<,'>`を表示させる。
1. `w ファイル名`を入力。
1. `:'<,'>w ファイル名`になっていることを確認。
1. `enter`で保存。

### ㊲Bファイルの取込 ※AとBはファイル名
1. Aファイルを開く。
1. 取り込みたい行にカーソルを合わせる。
1. Bファイルの内容を`:r B`で読み込む。

　　　外部コマンドの出力の読み込み。
例）`:r !ls` で一覧がカーソル行の下に追記される。

### カーソルの移動とか
|番号|コマンド|意味|モード|
|:--:|:--:|:--|:--:|
|㊳|r|カーソルの下の文字を置きかえ|Normal→Insert|
|㊴|gg|先頭行に移動|Normal|
|㊵|G|最後の行に移動|Normal|
|㊶|●G|●(数字)行に移動|Normal|
|㊷|j|下に移動|Normal|
|㊸|k|上に移動|Normal|
|㊹|`h`(または`b`)|左に移動|Normal|
|㊺|`l`(または`w`または`e`)|右に移動|Normal|
|㊻|0(ゼロ)|今いる行の頭に移動|Normal|
|㊼|a|カーソル上の文字の直後へ飛び、Insert|Normal→Insert|
|㊽|A|今いる行の最後へ飛び、Insert|Normal→Insert|
|㊾|I|今いる行の最初へ飛び、Insert|Normal→Insert|
|㊿|%|カーソル直下に括弧があるとき`括弧の始め`又は`括弧の終わり`に移動|Normal|
||.|直前にやったことの繰り返し|Normal|
||J|1つ下の行と連結|Normal|　　

50選で終わりたかったのに・・2個オーバーしてしまいました

## 必要か定かではないVimのコマンド  

|コマンド|意味|モード|
|:--:|:--|:--:|
|H|表示されている画面の一番上に移動|Normal|
|M|表示されている画面の真ん中に移動|Normal|
|L|表示されている画面の一番下に移動|Normal|
|`R`|`R`で置換モード(？)にして、置換したい文字を編集。終了するときは`esc`|Normal|