よく使われているvimのプラグイン top20

以前に「[オレ的vimプラグイン10選](https://qiita.com/reireias/items/beaa3bb0e299ae934217)」という記事を書いたのですが、この記事では完全に主観で紹介するvimのプラグインを決めていました。
「[世の中のエンジニアのalias設定](https://qiita.com/reireias/items/d906ab086c3bc4c22147)」を書く際に利用したスクリプトを用いて、客観的なデータからおすすめのプラグインを紹介するのも面白そうだなと思い、調査してみました。

ランキングとプラグインの一言説明を紹介していきます。

### 更新履歴
- 2019/04/15 公開
- 2020/06/13 再集計しランキングを更新しました
  - ランキングを最新版に更新
  - 過去に20位圏内だったプラグインの詳細を残した
  - 新規にtop100にランクインしたプラグインの説明を追加

### 関連記事
- [よく使われているvimrcの設定ランキング](https://qiita.com/reireias/items/230c77b3ff5575832654)
- [世の中のエンジニアのalias設定](https://qiita.com/reireias/items/d906ab086c3bc4c22147)
- [オレ的vimプラグイン10選](https://qiita.com/reireias/items/beaa3bb0e299ae934217)

## 対象
- GitHub上の[dotfilesトピック](https://github.com/topics/dotfiles)がついたリポジトリ
- スター数順に上位**1000**リポジトリ
- 対象ファイルは`*vimrc`と`init.vim`と`*.toml`

集計にはこのツールを使いました。
[reireias/dotseeker](https://github.com/reireias/dotseeker)

## 集計スクリプト
ワンライナー教の信者なのでシェル芸してます。

```sh
find files -type f | xargs cat | sed -e 's/^[ \t]*//g' -e 's/[ \t]*$//g' -e '/^$/d' -e '/^["\\]/d' | ag / | sed -e 's/ /\n/g' | ag -o "[a-zA-Z0-9][a-zA-Z0-9_.-]+/[a-zA-Z0-9][a-zA-Z0-9_.-]+" | sort | uniq -c | sort -nr
```

## 1位 [tpope/vim-fugitive](https://github.com/tpope/vim-fugitive)
304票（前回：276票、1位）
第1位はvimからGit操作を行うことができる`vim-fugitive`でした！

下の画像は`:Gblame`で`git blame`の内容を表示している例です。
![gblame.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/05295a1b-76c9-fd01-efdc-880493e0cc5f.png)


こちらは`:Gdiff`による`git diff`の表示です。
![gdiff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/59c114bd-b600-5e26-91c6-80d2f148ca5c.png)

他にも`:Gstatus`で`git status`の結果を表示し、そこからファイルを選択して開く、といった機能もあります。

## 2位 [tpope/vim-surround](https://github.com/tpope/vim-surround)
269票（前回：263票、2位）
括弧やクオート、XMLタグ等を表すテキストオブジェクトを追加することで、「シングルクオートをダブルクオートに変更」や「`[Hello]`から括弧を削除」等の操作ができるようになります。

```
例
cs"' : ダブルクオートをシングルクオートに置換
ds[  : []を削除
```

![surround.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/3e153ebb-014a-362a-7bd7-44464b23b56d.gif)


## 3位 [airblade/vim-gitgutter](https://github.com/airblade/vim-gitgutter)
217票（前回：214票、3位）
Gitの追加/削除/変更された行を行番号の左に表示してくれます。

![gitgutter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/28f4ed04-8c6f-0979-9a3b-0118944400b5.png)


## 4位 [scrooloose/nerdtree](https://github.com/scrooloose/nerdtree)
215票（前回：211票、4位）
ファイルツリーを表示することができます。
ツリー上のファイルに対して表示、分割表示、プレビュー等が行えます。
また、gitの追加/更新などの情報も表示されます。
下記画像では、[ryanoasis/vim-devicons](https://github.com/ryanoasis/vim-devicons)と[ryanoasis/nerd-fonts](https://github.com/ryanoasis/nerd-fonts)も導入しているので、ファイルタイプごとにアイコンが表示されています。

![nerdtree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/9299cb0c-4cd3-cbe8-a829-11c0d8b1ca0e.png)

## 5位 [junegunn/fzf.vim](https://github.com/junegunn/fzf.vim)
206票（前回：156票、7位）
インクリメンタルサーチツール`fzf`を利用した様々な検索を提供するプラグインです。

`:GFIles`で`git ls-files`の結果に対し、インクリメンタルサーチを実施している例です。
![fzf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/c6977e1d-c31d-c928-22d1-5bb75b67688e.gif)

## 6位 [junegunn/fzf](https://github.com/junegunn/fzf)
169票（前回：144票、10位）
`fzf`をvimから使えるようにするプラグインです。
5位の`fzf.vim`の依存プラグインです。

## 7位 [tpope/vim-repeat](https://github.com/tpope/vim-repeat)
167票（前回：157票、6位）
`.`によるコマンド繰り返し機能をより強力にしてくれるプラグインです。
例えば、2位のvim-surroundが`.`による繰り返しで利用できるようになります。

## 8位 [tpope/vim-commentary](https://github.com/tpope/vim-commentary)
164票（前回：155票、8位）
複数行を一気にコメントアウトできるプラグインです。
範囲コメントの無い言語で重宝します。

![commentary.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/f11bb408-84eb-1db6-186d-cdee653e8b3f.gif)


## 9位 [vim-airline/vim-airline](https://github.com/vim-airline/vim-airline)
146票（前回：146票、9位）
ステータスバーをいい感じにカスタマイズできるプラグインです。

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/507f7464-f33a-ab6b-4e15-0eb738bb8a40.png)

## 10位 [vim-airline/vim-airline-themes](https://github.com/vim-airline/vim-airline-themes)
132票（前回：126票、12位）
ステータスバーのカスタマイズ用テーマ集です。
[wiki](https://github.com/vim-airline/vim-airline/wiki/Screenshots)に全テーマのスクリーンショットが掲載してあります。

## 11位以下
### 11位 [w0rp/ale](https://github.com/w0rp/ale)
120票（前回：168票、5位）
非同期でLintツールを実行してくれます。

現在はOrganization配下へ移動されたため、票が別れてしまってランクダウンしていました。
[dense-analysis/ale](https://github.com/dense-analysis/ale)

ちょっと昔は`syntastic`というツールがメジャーでしたが、こちらは同期処理であったため、lintが走っている間はvimの操作が行えませんでした。

下のgifはeslintの例です。

![ale.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/41aae68e-4c07-f861-c1b0-6b8c3ec31765.gif)

### 12位 [sheerun/vim-polyglot](https://github.com/sheerun/vim-polyglot)
118票（前回：110票、16位）
様々な言語のシンタックスやインデントを提供するプラグインです。

### 13位 [fatih/vim-go](https://github.com/fatih/vim-go)
117票（前回：128票、11位）
Go言語の開発用プラグインといったらこれです。（テスト、lint、フォーマッタ等）

### 14位 [pangloss/vim-javascript](https://github.com/pangloss/vim-javascript)
114票（前回：117票、13位）
javascript開発用プラグインです。（インデント、ハイライト）

### 15位 [majutsushi/tagbar](https://github.com/majutsushi/tagbar)
110票（前回：115票、14位）
ctagsで生成されたタグをアウトライン風にウィンドウに表示します。

![tagbar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/0ad40300-0351-ec89-99e2-0f2cafd23ab9.png)

### 16位 [junegunn/goyo.vim](https://github.com/junegunn/goyo.vim)
106票（前回：93票、18位）
余白を追加し、ステータスバー等も隠すプラグインです。
![goyo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/7731b5da-7de2-a67b-2b58-f37cd86b23bc.png)

### 17位 [itchyny/lightline.vim](https://github.com/itchyny/lightline.vim)
99票（前回：78票、30位）
9位のvim-airline同様にステータスバー/タブバーをカスタマイズするプラグインです。
以下に設計思想がかかれています。
[lightline.vim作りました - プラグインの直交性について](https://itchyny.hatenablog.com/entry/20130824/1377351527)

### 18位 [SirVer/ultisnips](https://github.com/SirVer/ultisnips)
96票（前回：93票、19位）
スニペットを拡張し、高速に使えるようにするです。

### 19位 [neoclide/coc.nvim](https://github.com/neoclide/coc.nvim)
95票（前回：圏外）
各種Language Server Protocolを扱うプラグインです。
言語に応じたLanguage Serverを導入することで、型やメンバーの自動補完、変数やメンバーの定義参照、変数やメンバーの利用箇所の検索、コードの自動フォーマット、コードのエラー分析や修正案の提示といった、さまざまな機能を実現できるのがこのLSPの特徴です。

coc.nvimでは下記コマンドで簡単にLanguage Serverの追加が可能です。

```
# javascript用Language Serverの追加
:CocInstall coc-tsserver
```

### 20位タイ [junegunn/vim-easy-align](https://github.com/junegunn/vim-easy-align)
93票（前回：86票、23位）
イコールの位置で揃えたりが可能な整形プラグインです。

![vim-easy-align](https://raw.githubusercontent.com/junegunn/i/master/easy-align/equals.gif)
READMEより

### 20位タイ [jiangmiao/auto-pairs](https://github.com/jiangmiao/auto-pairs)
93票（前回：90票、20位）
対となる括弧を追加/削除してくれるプラグインです。

### 20位タイ [editorconfig/editorconfig-vim](https://github.com/editorconfig/editorconfig-vim)
93票（前回：88票、21位）
`.editorconfig`ファイルに書かれた設定で拡張子毎にインデントや改行等の設定でフォーマットすることができるプラグインです。
チームで開発する際に重宝します。

### 20位タイ [christoomey/vim-tmux-navigator](https://github.com/christoomey/vim-tmux-navigator)
93票（前回：76票、31位）
tmuxのペインとvimのスプリット間のシームレスな移動キーマップを提供してくれるプラグインです。

## 前回20位以内
### 28位 [Shougo/deoplete.nvim](https://github.com/Shougo/deoplete.nvim)
87票（前回：114票、15位）
Neovim 0.3以降 or Vim8で動作する高速な補完プラグインです。

### 24位タイ [mattn/emmet-vim](https://github.com/mattn/emmet-vim)
92票（前回：99票、17位）
選択した範囲に対してイイ感じにhtmlタグを設定できるプラグインです。
![emmet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/fa7cb8e3-77d2-8529-43d0-c4f93e66adcf.gif)

## その他前回100位圏外からのランクイン
- [dense-analysis/ale](https://github.com/dense-analysis/ale)
  - 66位、46票
  - Organization配下に移動されたため票がわかれてしまっているようです
- [tmux-plugins/vim-tmux-focus-events](https://github.com/tmux-plugins/vim-tmux-focus-events)
  - 84位、34票
  - vimのterminalとtmuxをいい感じに動作するようにしてくれる
- [arcticicestudio/nord-vim](https://github.com/arcticicestudio/nord-vim)
  - 84位、34票
  - north-bluishなカラースキーマ
- [junegunn/gv.vim](https://github.com/junegunn/gv.vim)
  - 92位、32票
  - git commit browser
- [othree/yajs.vim](https://github.com/othree/yajs.vim)
  - 94位、31票
  - jelera/vim-javascript-syntaxからforkした新しいキーワードに対応したsyntax highlight
- [roxma/vim-hug-neovim-rpc](https://github.com/roxma/vim-hug-neovim-rpc)
  - 96位、30票
  - vim8でneovim rpcを動かす実験的なプラグイン
- [junegunn/vim-peekaboo](https://github.com/junegunn/vim-peekaboo)
  - 96位、30票
  - レジスタの一覧を表示し、選択することでペーストができるプラグイン
- [jparise/vim-graphql](https://github.com/jparise/vim-graphql)
  - 96位、30票
  - graphqlのファイル検出やsyntax highlight、インデントなどをサポートしてくれる
- [machakann/vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)
  - 99位、29票
  - yankする領域をハイライトしてくれる![vim-highlightedyank.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/c3b3a5c6-fed8-3ffb-21c9-e4151b477bd7.gif)


## 24位〜100位
<details>
<summary>24位〜100位</summary>
     92 scrooloose/nerdcommenter
     92 mattn/emmet-vim
     92 honza/vim-snippets
     89 tpope/vim-unimpaired
     87 Shougo/deoplete.nvim
     83 godlygeek/tabular
     82 tpope/vim-endwise
     80 Yggdroot/indentLine
     76 ryanoasis/vim-devicons
     73 tpope/vim-rhubarb
     73 tpope/vim-eunuch
     72 ctrlpvim/ctrlp.vim
     71 plasticboy/vim-markdown
     71 elzr/vim-json
     69 rust-lang/rust.vim
     69 mbbill/undotree
     67 terryma/vim-multiple-cursors
     65 leafgarland/typescript-vim
     65 ervandew/supertab
     65 easymotion/vim-easymotion
     62 tpope/vim-abolish
     62 mxw/vim-jsx
     60 scrooloose/syntastic
     60 ap/vim-css-color
     58 altercation/vim-colors-solarized
     57 kana/vim-textobj-user
     57 bling/vim-airline
     56 tpope/vim-rails
     56 mhinz/vim-startify
     55 cespare/vim-toml
     54 mileszs/ack.vim
     54 Raimondi/delimitMate
     52 vim-ruby/vim-ruby
     52 morhetz/gruvbox
     52 macros/matchit.vim
     51 wellle/targets.vim
     50 tpope/vim-markdown
     50 junegunn/limelight.vim
     49 Xuyuanp/nerdtree-git-plugin
     48 tpope/vim-sensible
     47 othree/html5.vim
     47 nathanaelkane/vim-indent-guides
     46 dense-analysis/ale
     45 tpope/vim-dispatch
     45 tomtom/tcomment_vim
     45 ntpeters/vim-better-whitespace
     45 VundleVim/Vundle.vim
     44 lervag/vimtex
     44 hail2u/vim-css3-syntax
     43 Valloric/YouCompleteMe
     43 AndrewRadev/splitjoin.vim
     41 xolox/vim-misc
     41 mhinz/vim-signify
     41 Shougo/vimproc.vim
     39 posva/vim-vue
     39 kien/ctrlp.vim
     37 tmux-plugins/vim-tmux
     36 tpope/vim-vinegar
     36 chriskempson/base16-vim
     35 tpope/vim-sleuth
     34 tmux-plugins/vim-tmux-focus-events
     34 mattn/gist-vim
     34 janko-m/vim-test
     34 arcticicestudio/nord-vim
     33 roxma/nvim-yarp
     33 mattn/webapi-vim
     33 kchmck/vim-coffee-script
     33 Shougo/dein.vim
     32 junegunn/gv.vim
     32 davidhalter/jedi-vim
     31 othree/yajs.vim
     31 cakebaker/scss-syntax.vim
     30 roxma/vim-hug-neovim-rpc
     30 junegunn/vim-peekaboo
     30 jparise/vim-graphql
     29 michaeljsmith/vim-indent-object
     29 machakann/vim-highlightedyank
</details>


## まとめ
名前はみたことあったけど、意外と人気だったプラグインとかが見つかり、いろいろと試してみたくなってきました。
試したプラグインは少しづつ追記していこうかと思います。