こんにちは。ゴリラです。

前回はVimのカスタマイズ方法について解説しました。Vimを使いやすくするためには設定を変更する以外にも、プラグインを導入する方法があります。プラグインを導入することで機能を拡張できるので、Vimの標準機能ではちょっと不便と感じていることも解消できる可能性があります。

今回はみなさんに、プラグインの仕組み、導入方法や筆者が普段使っている便利なプラグインを紹介していきます。

プラグインの仕組みと導入方法

プラグインの仕組み

プラグインの実態はVim scriptで書かれたスクリプトファイルです。Vim scriptはVim上で使用することが出来るスクリプト言語で、vimrcに設定を記述するときにも使用します。それらのファイルを読み込むことで、プラグインが提供しているコマンドなどを使用することができます。

プラグインの導入方法

スクリプトファイルを:sourceもしくは:runtimeコマンドで読み込むことができますが、Vimを起動したら使えるようにしたいという方がほとんどかと思います。そこでVimのpackages機能を使用します。Vimの{packpath}/pack/{任意のディレクトリ名}/start配下にプラグインのディレクトリを配置することで、Vim起動時に読み込んでくれます。{packpath}の設定値は:set packpath?で確認できます。

ちなみに、筆者の場合のpackpathは次のようになっていて、普段プラグインを作るときは~/.vim/pack/plugins/start/配下にプラグインディレクトリを置いています。

packpath=~/.vim,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim81,/usr/local/share/vim/vimfiles/after,~/.vim/after

現在では多くのプラグインがGitHub上で管理されているので、gitコマンドとpackages機能を使うことで簡単にプラグインを導入できるようになっています。便利な時代ですね。

プラグインの管理

導入するプラグインが多くなると、今度は管理が大変になってきます。そこでプラグインの管理をするプラグインを使用すると便利です。管理プラグインはいくつかありますが、筆者はdein.vimというプラグインを使用しています。dein.vimはtomlファイルを使ってプラグインを管理する事ができます。tomlファイルに記述してプラグインをインストール、またtomlファイルから削除してプラグインをアンイストールできるので便利です。ただ、インストールもアンイストールも自動でやってくれるわけではないので、少し手を加える必要があります。筆者の場合はvimrcに以下の設定をしています。

" dein.vim settings {{{
" install dir {{{
let s:dein_dir = expand('~/.cache/dein')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
" }}}

" dein installation check {{{
if &runtimepath !~# '/dein.vim'
  if !isdirectory(s:dein_repo_dir)
    execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
  endif
  execute 'set runtimepath^=' . s:dein_repo_dir
endif
" }}}

" begin settings {{{
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)

  " .toml file
  let s:rc_dir = expand('~/.vim')
  if !isdirectory(s:rc_dir)
    call mkdir(s:rc_dir, 'p')
  endif
  let s:toml = s:rc_dir . '/dein.toml'

  " read toml and cache
  call dein#load_toml(s:toml, {'lazy': 0})

  " end settings
  call dein#end()
  call dein#save_state()
endif
" }}}

" plugin installation check {{{
if dein#check_install()
  call dein#install()
endif
" }}}

" plugin remove check {{{
let s:removed_plugins = dein#check_clean()
if len(s:removed_plugins) > 0
  call map(s:removed_plugins, "delete(v:val, 'rf')")
  call dein#recache_runtimepath()
endif
" }}}

Vim起動時にdein.vimがインストールされていなければまずdein.vimをインストールし、その後にtomlファイルを読み込み、未インストールのプラグインを全てインストールします。また、tomlファイルからプラグインが削除されたら、プラグインの本体も削除するようにしています。tomlファイルは~/.vim/dein.tomlに配置しています。

プラグインの追加

基本的にtomlファイルに repp = GitHubのユーザ名/リポジトリ名という形で追記してVimを再起動するだけです。簡単ですね。

[[plugins]]
repo = 'fatih/vim-go'

おすすめプラグイン

プラグインの導入方法についてわかったところで、筆者が普段良く使っている便利なプラグインを紹介していきます。

ファイルなどのあいまい検索

fzf.vimはファイルを曖昧検索して開くことができます。現在のディレクトリ配下のファイル一覧から開きたいファイルを絞り込んで、複数ファイルを分割もしくはタブで開くことができます。ファイル以外にもバッファなども開けます。Go製のfzfというコマンドを使っているため、動作も軽いです。筆者的には欠かせないプラグインの1つです。


導入するには以下をtomlに追記します。

[[plugins]]
repo = 'junegunn/fzf'
build_on = '''
./install -all
'''

[[plugins]]
repo = 'junegunn/fzf.vim'

Markdownのプレビュー

筆者は普段、記事を書いたり、メモをとったりするときによくMarkdown形式で書いています。書いた内容をブラウザで表示したときにレイアウトが崩れていないかを確認したいときがあるのでpreview/preview.vimを使っています。ファイルを保存するたびブラウザ画面も更新されます。便利です。

導入するには以下をtomlに追記します。

[[plugins]]
repo = 'previm/previm'

Markdownのテーブル作成

Markdown形式で書いているとテーブルをサクッと作りたくなることがあります。そのときに使用するのがmattn/vim-maketableです。セルの単語を,で区切ったあとに:MakeTable!を実行するとサクッとテーブルを作れます。


導入するには以下をtomlに追記します。

[[plugins]]
repo = 'mattn/vim-maketable'

ヘルプの日本語化

Vimのヘルプはすごく充実していますが、デフォルトは英語です。筆者は英語が苦手なので日本語化しています。ヘルプを日本語化するには、まずvim-jp/vimdoc-jaをtomlに追記します。

[[plugins]]
repo = 'vim-jp/vimdoc-ja'

それから、vimrcに次の設定を追記します。

set helplang=ja

日本語化できるとヘルプが画像の様に日本語になります。

置換のプレビュー

Vimで文字列置換をするときによく正規表現を使いますが、筆者は正規表現が苦手なので置換結果をプレビューしたいことが多々あります。そういうときはmarkonm/traces.vimを使用します。こちらのプラグインはリアルタイムで置換結果をプレビューしてくれます。想定通りに置換されるかどうかを確認するのにとても便利です。


導入するには以下をtomlに追記します。

[[plugins]]
repo = 'markonm/traces.vim'

Google翻訳

普段OSSのドキュメントを書いたり、コメントを読んだりする時に翻訳したいことが多く、ブラウザとVimを行き来して不便だったのでGoogle翻訳をVim上で使えるようにtranslate.vimというプラグインを作りました。ビジュアルモードで翻訳したい範囲を選択して:Translateすると翻訳されます。翻訳元と翻訳先はvimrcに記述します。詳細はREADMEを参照してください。


導入するには以下をtomlに追記します。

[[plugins]]
repo = 'skanehira/translate.vim'

Docker操作

筆者は開発でDockerを使ったりしますが、Vim上でDockerを操作できたら便利と思いdocker.vimというプラグインを作りました。Vim上でイメージをpullしたり、コンテナを立ち上げたり、作成してattachしたりと、色々な機能があります。控えめに言って便利です。


導入するには以下をtomlに追記します。

[[plugins]]
repo = 'skanehira/docker.vim'

最後に

プラグインはとても便利です。1つ導入するだけでも作業効率が上がったりしますが、プラグインに頼りすぎてしまうとプラグインなしではVimを使って作業できなくなってしまう可能性があります。そのため、筆者は「これは標準機能や設定で賄えるかどうか?」を判断基準にしてプラグインを入れるかどうか決めています。
これはあくまで筆者の考えと拘りなので正解ではないので、強制するものではないのですが、そういった考えもあるというのを知って頂ければと思います。

最後に、本記事ではほんの一部のプラグインを紹介しましたが、他にもたくさん便利なプラグインがあります。@yutakatayさんによるカテゴリごとのプラグインをまとめた記事がありますので、ぜひ読んでみてください。

次回はいよいよ最終回です。プラグインを実際にどうやって作っていくのかを解説していきます。作る上で必要最低限のVim scriptの書き方も合わせて解説していきますので楽しみにして頂ければと思います。

vim