【学習】Linuxコマンド　Day6

# おさらい
前回まで学習したことはこちらです。

- 環境構築 
　→https://qiita.com/imagatasaki/items/4c510cacc6f17556c3b9
- コマンドラインの操作方
- 基本的なコマンド① 
　→https://qiita.com/imagatasaki/items/37a7c12bce015d6bdc4a

- 基本的なコマンド②(ファイル操作)
　→https://qiita.com/imagatasaki/items/7abc96b0afea475077a2
　→https://qiita.com/imagatasaki/items/6ccf0e1cd44ebe1d3e9b
- パーミッション
- スーパーユーザー
　→https://qiita.com/imagatasaki/items/39e081d9c10c1448e0c7

# 今日学ぶこと
- Vimについて
- ノーマルモード
- コマンドラインモード
- インサートモード
- ビジュアルモード

# Vimとは
Vim(ヴィム)はViが改良されたもので、CLIで使用するテキストエディタ
Day1でもViは少しだけ触りましたが、Vimが上位互換であり、viコマンドを実行するとVimが起動されるようになっている。今回vim-minimal最低限のversionだったため、高機能版のインストールを行いました。

```
# yum -y install vim-enhanced
```

### 起動する
```
$ vi
```
### 終了する
```
:q
```
終了時はこちらを入力し、Enterで終了。
testというファイルを作成してVimで開いてみる
### ファイルを開く
```
$ touch test
$ vi test
```

# 4種類のモード
Vimにはモードが4種類存在している。
| モード     |      意味 |   キー|
|:-----------------:|:------------------|:------------------:|
| ノーマル            |              デフォルト|        Esc      |
| コマンドライン          |            コマンドを利用する|       :       |
| インサート             |              ファイルに文字を入力する|        i,a       |
| ビジュアル               |               範囲選択が可能となる|         v,V         |

## ノーマルモード

ノーマルモードはデフォルトの状態。
必ずモードを変更するときはこのノーマルモードを経由すること。
Escキーを押すとノーマルモードに戻ることができる。
キーを使用して移動、削除、もとに戻す、やり直す、が可能。
|キー    |      意味 | 
|:-----------------:|:------------------|
|h           |              1文字左へ移動|       
|j       |            1行下へ移動|      
|k          |              1行上へ移動|     
|l                |      1行右へ移動    |  
|x                |      カーソル位置から1文字削除    |  
|u                |      やり直す    |  
|Ctrl + r                |      元に戻す    |  



## コマンドラインモード
Vimに用意されているコマンドを実行するためのモード。
例として上記の終了時には「:」を入力し、コマンドラインモードに切り替え、「q」というコマンドで終了した。
Vimでのみ使えるコマンドのため注意が必要。
コマンドはこちら
| コマンド    |      機能 | 
|:-----------------:|:------------------|
| :q            |              Vimを終了|       
|:q!       |            Vimを強制終了(変更を破棄)|      
| :w           |              上書き保存|     
| :w ファイル名                |           名前を付けて保存|  
| :wq                |               上書き保存してVimを終了|   

## インサートモード
Vimで開いたテキストファイルを編集するモード。
テキストファイルに文字を追加する場合、ノーマルモードから切り替えて使用する。
切り替えのためのキーはi,aだが、iがカーソル位置から開始となり、aが一文字右から開始となる。
インサートモード中の移動や削除などは普段使用しているテキストエディタと変わらない。
|キー    |      意味 | 
|:-----------------:|:------------------|
|矢印キー           |            カーソル移動|       
|BackSpace       |            カーソル位置から一文字左の文字を削除|      
|Delete          |              カーソル位置の文字を削除|     
|Enter                |     改行|

##　ビジュアルモード
Vimで範囲選択を行うためにはこのビジュアルモードに切り替える必要がある。
カーソル移動の方法はノーマルモードと共通。
ビジュアルモードに切り替えたカーソルの地点から移動先のカーソルの左の一文字までが選択した範囲となる。

これを用いてコピーや削除を行う。
|キー    |      意味 | 
|:-----------------:|:------------------|
|x           |            選択範囲を削除|       
|y       |            選択範囲をコピー|      
|p          |            選択範囲を貼り付け|     

## 練習
例①:testというファイルを作成し、ファイル内にHelloと入力し、上書き保存して終了する。
```
$ touch test
$ vi test
```
そして"i"でインサートモードに切り替え...
```
Hello
```
入力
```
:w
```
上書き保存
```
:q
```
終了
```
$ cat test
Hello
```
インサートモードによりHelloと入力され上書き保存できていることが確認できた。

例②:testファイルに対し、viからビジュアルモードで範囲選択から"Hello"をコピー、2回貼り付けを行い、「test2」で名前を付けて保存を行う。
例①で使用したtestファイルを再利用。
```
$ vi test
```
Vimを開く
```
v
```
ビジュアルモードに切り替える。
```
Hello
```
Helloの右端までカーソルを移動させ、"y"でコピー
"p"で二回貼り付ける
```
HelloHelloHello
```
Escキーでノーマルモードへ戻る
```
:w test2
```
test2で新たに名前をつけて保存する
```
:q!
```
今回はtestには上書きを行わないため、:qでは終了できないので:q!で強制終了する。
```
$ ls
test test2
$ cat test
Hello
$cat test2
HelloHelloHello
```
これでtestは上書きされず、test2が作成されていることが確認できた。

# おつかれまでした
今回はVimについて学習しましたが、4つのモードに対して、しっかり役割を押さえ、細かいところですが、移動等のキー操作に慣れておくことが作業効率を上げる観点で大切だと感じました。
一つ一つは複雑ではないと感じますので、今回作成した表などを活用してもっと練習が必要だと考えます。
振り返ってみると普段のGUIと比べイメージがつかみにくい、という印象はありましたが、とにかく手を動かすことで慣れてきた実感はあります。基本的なことばかりかと思いますがおろそかにせず、実践的な内容に近いうちにつながられればよいと思います。