vimのおすすめしたい小技集

vimを業務で使い始めて約半年がたちました！
その過程で私が手にしたよく使う小技をいくつか紹介します！

# 検索系
## 現在のカーソル上の文字を検索

編集モードで検索したい文字列にカーソルを合わし`*`を押してあげるだけです！

![asutarisuku.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/1245633b-e784-588e-1530-8c788f6717d5.gif)


## 複数の文字を検索
`|`を使うことで複数の文字列を検索することができます！

```
/検索文字列\|検索文字列2
```

![orsearch.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/eb919b4b-2c8d-b844-902d-4c876012db84.gif)




## 検索で役立つvimrcの設定

```vim:.vimrc
set incsearch " インクリメンタルサーチ. １文字入力毎に検索を行う
set ignorecase " 検索パターンに大文字小文字を区別しない
set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する
set hlsearch " 検索結果をハイライト
```



## vimgrepとQuickfixで検索結果一覧を表示！
通常の検索も便利ですが、vimgrepとQuickfixを用いた検索は検索結果一覧を表示できるの便利です！
画面移動を行ってEnterを押すだけで対象の行まで移動してくれるので非常にオススメです！

コマンド

```vim:編集モードで下記を入力
:vim 検索文字列(正規表現も使えます！) 検索対象ファイル
```
vimrcの設定

```vim:.vimrc
" vim grepすると自動的にあたらしいウィンドウで検索結果一覧を表示する
autocmd QuickFixCmdPost *grep* cwindow
```

### ファイル内検索
現在開いているファイル内で文字列を検索する際は`%`を使用します！

```vim:編集モードで下記を入力
:vim function %
```

![vimgrep1.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/86dbf6bb-d5e9-4d6b-d906-8d4bbce0b54e.gif)



### 別ファイル内の文字列検索

srcディレクトリ配下のファイルから特定の文字列を検索する場合

```vim:編集モードで下記を入力
:vim function src/*
```
![vimgrep2.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/a0122c82-facc-fd27-fbfd-566dacd44be4.gif)



# 移動系
## タイプした文字が次に出てくるところに移動
編集モードで`f`を押した後に任意の文字列を入力すると、その文字列が次に現れるところに移動します。


`(`まで移動したい時：f(

![fidou.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/7fe72987-d84f-df70-8d8a-72fcaf99e5af.gif)


## 画面移動
半画面下：Ctrl + d
半画面上：Ctrl + u
ファイルトップ：gg
ファイルの最後：G

![idou.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/62bb0cba-87a4-ef6d-d542-a974e415e80c.gif)


# 入力&削除系
1行削除：dd
1単語削除：de
削除した行をペースと: dd + p
カーソルより後ろの文字列削除：D 

![delete.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/5c794423-0b02-721f-327f-c5449ae4ff2c.gif)

## `{}`や`''`, `()`の中の文字をまとめて削除
`di'`で`''`ないの文字をまとめて削除します！
また、削除して入力モードに入りたい婆は`ci'`と入力します。
`()`内を削除したい場合は`di(`, `ci(`に変わるだけです！

個人的にはコレがかなり優秀です！
DBのIPや条件文を修正する時に大活躍してます

![kakko.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/c279686a-f3d6-a024-747b-c9be18890805.gif)



# ヴィジュアルモード
編集モードで` v`を押すと、ヴィジュアルモードになります。
その状態でカーソルを移動、`y`を押すと範囲コピーができます！
`y`ではなく`x`を押すと選択した範囲を切り取れます！


![visual.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/e1c7c61e-91e2-8e55-d103-b8f5fd06c03a.gif)


## 矩形選択最高です
`Ctrl + v`で矩形選択になります。
その状態で、yを押すと選択した範囲をコピーします！

また、選択している状態で`I`を入力後、特定の文字を入力しESCすると選択した箇所に入力した文字を入れてくれます！

![kukei.gif](https://qiita-image-store.s3.amazonaws.com/0/176573/9f2d6272-b3b4-ca52-58bd-b3add13520d3.gif)



# vimの動作環境に関する小技

## カラースキーマ編
molkaiを設定した時、macの時は色鮮やかなカラースキーマが設定されますが、別の環境だと色合いがおかしいときがあります。そんな時は`TERM`変数を確認してください！

macでのvim：カラースキーマmolokai
![xterm-256.png](https://qiita-image-store.s3.amazonaws.com/0/176573/c73b9c61-1c06-c326-a4cc-cd922d307729.png)

debianでのvim：カラースキーマmolokai
![xterm.png](https://qiita-image-store.s3.amazonaws.com/0/176573/86d215a4-289f-d97c-5aed-2e600a4ccfbc.png)


### TERM変数について
> TERM変数は扱う端末の種類を表しています。

mac, debian, centosなど、linux系のOSでTERM変数をechoしてあげると、異なる値が出てきます。

```bash:mac
$ echo $TERM
xterm-256color
```

```bash:debian
root@1896d623ecce:/# echo $TERM
xterm
root@1896d623ecce:/#
```

```bash:centos7
[root@c7154b6a2960 /]# echo $TERM
xterm
[root@c7154b6a2960 /]#
```



termとxterm-256colorではcolorが違うということがわかります！

```bash
xterm-256color:	colors#256, cols#80, it#8, lines#24, pairs#32767,
xterm: colors#8, cols#80, it#8, lines#24, pairs#64,
```

### vimでカラースキーマを使うにあたり、TERM変数は重要
この流れだと、わかるとおもいますが`xterm`だと256colorに対応していないため綺麗なカラースキーマが実現されません。

そのため、新しく環境を用意した際などは`TERM`変数を確認するようにしましょう。
echoでも問題ないですし`env`コマンドを打つと登録されている環境変数一覧を確認できます！



```bash:debian
root@1896d623ecce:/# env
HOSTNAME=1896d623ecce
NJS_VERSION=1.13.6.0.1.14-1~stretch
NGINX_VERSION=1.13.6-1~stretch
PWD=/
HOME=/root
no_proxy=*.local, 169.254/16
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
```

その後、TERM変数にxterm-256colorが入るように設定してあげましょう

```bash:debian
root@1896d623ecce:/# echo export TERM=xterm-256color >> ~/.bashrc
```