Vim

#概要
vimはエディターの一つです。
ターミナルで`vim`と入力すると、Vimが起動します。。
起動の初期状態はノーマルモードである。ノーマルモードで`i`を入力すると入力モードに切り替わる。`esc`キーを押すことでノーマルモードに戻ることができる。Vimを終了するには`:`を押してコマンドラインモードに切り替えてから`q`を押してエンター。これで終了できる。
変更点を無視して終了したい場合は`:q!`と入力する。`!`をつけると変更を無視して終了できます。
Vimを使用してファイルを書き換えて保存する場合、`:`の後に`wq`と押すことで保存して終了することができる。
なお、`:w`だと保存されてVimは終了しない。
ファイル名を変えて上書き保存したいときは`:w`の後に、変更したいファイル名を続ければ変更かつ保存できます。

`v`を押すとヴィジュアルモードを起動することができる。選択しながら目視できる。

今いるファイルから別のファイルに移動したいときは`:e`の後にファイル名を続ければ移動できる。

##移動系のコマンド

ノーマルモードで、`gg`と入力すると一番先頭に移動する。逆に1番下に移動したいときは`G`と入力することですぐに移動できる。

画面単位で移動したい際は`control + f`で1画面上に移動できます。逆に、1画面したに移動したいときは、`control + b`で移動することができます。

単語単位で移動したい際は、`w`で単語単位で進み、逆に`b`で単語単位で戻ることができる。

行単位の移動
`^`を入力すると行頭に移動できます。逆に`$`を入力すると行末に移動することができます。

ユニーク移動
`f`+`移動したい箇所の文字`を入力すると移動できます。
例えば、`fr`と入力すると行ないの次にある`r`に飛びます。`r`が複数あって次の`r`に行きたい場合は`;`を入力すると次の`r`に移動できます。続けて`;`を入力すると更に次の`r`に移動できます。

{}移動
`{`で`%`を入力すると対応する`}`に移動できます。もう一回入力すればまた戻れます。`()`でも同様です。

###ビジュアルモード
`v`　文字単位の選択
`shift + v` = `V`　行単位の選択
`control + v` 矩形選択
`gg`で先頭に戻って`shift + v`で行単位の選択に切り替え`G`で全選択になります。

###カット
ノーマルモードで`x`一文字カット`dd`で行単位でカット、複数行カットしたい場合は、カットしたい行数 + `dd`でカットできます。例えば、３行まとめてカットしたい場合は`3dd`のなります。
カットしたいものを貼り付けるには`p`と入力すれば貼り付けることができます。直前にカットしたものが貼り付けられます。

カットではなくコピーしたい場合は`yy`と入力することでコピーできます。行ごとのコピーになります。複数行コピーしたい場合は、カット同様に行数を指定します。例えば、５行まとめてコピーしたい場合`5yy`となります。

##検索
ノーマルモードで`/`を入力した後に、検索したい単語を入力してエンターを押すと、その単語の位置に移動してくれます。
検索した単語が複数マッチする場合があります。下にあるマッチした単語に移動する際は、`n`で移動できます。逆に、上に移動したい場合は`N`で移動できます。

####カーソルがある位置の単語を検索
`*`　今カーソルがある位置から上の完全にマッチしている単語に移動してくれます。
`#`　今カーソルがある位置から下の完全にマッチしている単語に移動してくれます。

##置換
今カーソルがある行内の文字を置換したい場合の方法です。
`:`でコマンドモードに切り替えます。`s`で置換を表明します。substituteの略です。その後に続けて`/`と行内にある置換したい単語や文字を入力します。またその後に続けて`/`と変更後の文字や単語を入力します。
この場合だと一番最初にマッチした文字しか置換されません。行内にあるマッチした１番目以降の文字もまとめて置換したい場合は後に続けて`/`と`g`を入力します。

ex)
:s/e/E   行内のeに最初にマッチした物をEに置換します。
:s/e/E/g　行内にあるeを全てEに置換します。

ファイル全体を置換したい場合は`:`の後、`s`の前に`%`を入力します。この`%`がファイル全体を意味します。
ex):%s/e/E/g ファイル全体にあるe全てををEに置換します。

ファイル全体で、複数マッチした際に、これは置き換えたい。これは置き換えたくない場合があったとします。
その場合は、`g`に続けて`c`を入力します。
ex):%s/e/E/gc

```ターミナル
replace with E (y/n/a/q/l/^E/^Y)?

```
上記のようにターミナルに表示されて、マッチした文字にカーソルがあたります。その際に選択肢を入力します。すると選択に合わせて処理がされて次にマッチした文字にカーソルが移動します。選択肢ですが、置き換える場合はy置き換えない場合はnなど様々な選択ができます。

##操作の取り消し
`u`はundoの略で、入力すると元に戻ります。間違えた時に使えます。更に間違えて`u`を押してしまったけれど、`u`を押す前の処理後の状態にしたい場合は、`control + r`で状態を変えられます。


##ウィンドウの分割
複数のファイルを同時に表示した場合に使えます。

`:sp` 画面を上下に分割したい時に入力します。
`control + w` + `w`　画面間を移動する時に入力します。
`:vs`　画面を左右に分割したい時に入力します。
`close`　画面を終了したい時に使います。


##タブ

`:tabnew`　新しいタブを開くことができます。
`:tabe` + `ファイル名`　予め開くファイルがわかっている場合は、`:tabe`の後にファイル名を続けることでファイルを指定して新たなタブを開くことができます。
ノーマルモードで`gt`でタブ間の移動ができます。
`:tabclose`　該当のタブを終了できます。
`vim -p ファイル名　ファイル名`　vim起動前に複数のファイルをタブで起動したい時に`-p`をつけて開きたいファイルを指定するとvimの起動が複数のタブでされます。

`:tabdo`　全てのタブで置換したい時に入力します。
ex):tabdo %s/e/E/g
全てのタブに対して置換が行われます。


##直前の操作を繰り返す
`.`をノーマルモードで押すことで、直前の操作を繰り返すことができます。
ex)`2dd`と入力して２行削除した後に、`.`を入力すると再び２行削除することができます。

##インデント
インデントを揃える際に使います。
`=`を入力することでインデントを揃えることができます。
`gg`+`shift + v`+`G`で全選択してから`=`を入力すると全体のインデントを揃えることができます。


##補完機能
あの関数名や、あの変数名をまた使いたい時に、使います。
頭文字や２文字目まで暗いを入力して、`control + n`を入力すると前に使った単語が表示されて選択できるようになります。一つしか該当しない場合は選択画面は表示されずに自動で補完されます。
長い関数名や変数名を再び入力するときに便利です。

##矩形選択
`control + v`で矩形選択して、`shift + i`=`I`を入力すると。複数行に跨って文字を入力することができます。`esc`二回入力で選択肢した箇所に全て反映されます。
まとめて入力したりまとめて削除したりする時に便利です。


##テキストオブジェクト
`cit` タグの中身を消して入力モードに入るという意味。
`cat` タグの中身も含めて全体を消して入力モードに入るという意味。
`c`　change delete && insert
`d` 削除

`i``a` 中身が全体かどうか
`i`は中身inner　`a`は全体all

`t` `"` `)` `]` カーソルがある行にある物を指定します。それらに対して処理ができます。


##便利な設定
`:set number`　行数を表示してくれます。
`:set nonumber`　行数を非表示にしてくれます。
`:syntax on`　色分けをしてくれます。
`:syntax off`　色分けを非表示にしてくれます。
`:set tabstop=数字` タブの文字数を指定できます。
`:set ignorecase` 大文字と小文字を区別しないようにできます。検索では通常小文字しか引っかかりませんが。これを使うことで大文字にもマッチするようになります。
`:set noignorecase`で区別するようになります。検索では小文字しか引っ掛からなくなります。