2018年に向けてNeoVim&dein.vimを整えた


こちらはフロムスクラッチ Advent Calendar 2017の4日目の記事です。

はじめに

  • 普段はIDEやAtomなどを全く使わず、VimでRubyやらJavaScriptを書いています。
  • 実践Vimを読んだものの、思考のスピードで編集できるほどのVim力はないです。

やりたいこと

  • literally the future of vim(直訳:文字通りvimの未来)と強気なNeovimを使ってみたい。
  • 2年前からメンテしていなくてぶっちゃけ重い.vimrcをキレイにしたい。
  • NeoBundleからとりあえずdein.vimに乗り換えた状態なので、使いこなしたい。具体的にはプラグインのTOML化を目指す。

環境

  • MacBook Pro(Retina, 13-inch, Early 2015)
  • macOS High Sierra Version 10.13.1
  • Homebrewは導入済み

NeoVimのインストール

まず最初にNeoVimをHomebrewを使ってインストールします。

$ brew install neovim
$ nvim


こんな感じでNeovimを起動することができました。

設定ファイルのパス

デフォルトだと~/.config/nvim/init.vimを読み込むようです。
僕はそういった類いのものはdotfilesでまとめて管理しているので、.zshrcに以下の記述を足しました。
こうすることで~/dotfiles/nvim/init.vimが設定ファイルになります。

.zshrc
export XDG_CONFIG_HOME=$HOME/dotfiles

設定ファイルとの戦い

dein.vimリポジトリのgit clone

任意のディレクトリにdein.vimをgit cloneします。

$ mkdir -p ~/dotfiles/.vim/dein/repos/github.com/Shougo/dein.vim
$ git clone [email protected]:Shougo/dein.vim.git \
    ~/dotfiles/.vim/dein/repos/github.com/Shougo/dein.vim

nvim/init.vimへの設定追加

ミニマルな設定をinit.vimに追加しました。

~/dotfiles/nvim/init.vim
" dein.vimによるプラグイン管理
if &compatible
  set nocompatible
endif

" dein.vimのclone先を指定する
set runtimepath+=~/dotfiles/.vim/dein/repos/github.com/Shougo/dein.vim

call dein#begin(expand('~/dotfiles/.vim/dein'))

call dein#add('Shougo/dein.vim')
call dein#add('Shougo/vimproc.vim', {'build': 'make'})

" 補完、スニペット
call dein#add('Shougo/neocomplete.vim')
call dein#add('Shougo/neosnippet')

" その他必要なプラグインはこちらに追加する

call dein#end()

一度NeoVimを終了し、再度立ち上げてから:call dein#install()でプラグインのインストールができます。
ここまででdein.vimの導入は終了です。

プラグインのTOML化

プラグインをTOMLにして別ファイルで管理ができるようなので、こちらを試してみます。

~/dotfiles/nvim/init.vim
" dein.vimによるプラグイン管理
if &compatible
  set nocompatible
endif

" dein.vimのclone先を指定する
set runtimepath+=~/dotfiles/.vim/dein/repos/github.com/Shougo/dein.vim

let s:dein_dir = expand('~/dotfiles/.vim/dein')

if dein#load_state(s:dein_dir)
    call dein#begin(s:dein_dir)

    call dein#load_toml(s:dein_dir . '/plugins.toml', {'lazy': 0})
    call dein#load_toml(s:dein_dir . '/lazy.toml', {'lazy': 1})

    call dein#end()
    call dein#save_state()
endif

init.vimはこんな感じに書き換える。

~/dotfiles/.vim/dein/plugins.toml
[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]] # 非同期処理
repo = 'Shougo/vimproc.vim'

[[plugins]] # colorschema
repo = 'chriskempson/vim-tomorrow-theme'

[[plugins]] # slimのハイライト
repo = 'slim-template/vim-slim'

[[plugins]] # ES6のハイライト
repo = 'othree/yajs.vim'

[[plugins]] # インデントを見やすく
repo = 'Yggdroot/indentLine'

[[plugins]] # j,kによる移動を爆速に
repo = 'rhysd/accelerated-jk'
~/dotfiles/.vim/dein/lazy.toml
[[plugins]] # 補完
repo = 'Shougo/neocomplete.vim'

[[plugins]] # スニペット
repo = 'Shougo/neosnippet'

[[plugins]] # スニペット
repo = 'Shougo/neosnippet-snippets'

[[plugins]] # メソッドの定義元にジャンプ
repo = 'szw/vim-tags'

[[plugins]] # Rubyのend補完
repo = 'tpope/vim-endwise'

[[plugins]] # ローカル変数ハイライト
repo = 'todesking/ruby_hl_lvar.vim'

これでプラグイン管理が相当スッキリしました。
2年間放置していた.vimrcがかなりキレイになりました。

終わりに

  • NeoVim導入してみたけど、通常のVimと比べてすごい!!感動する!!という感じはない。
  • プラグインを色々入れては見るものの、普段からよく使っているものは少ないから定期的に整理したい。
  • .vimrc(init.vim)がかなり整理できたのが収穫。