こちらはフロムスクラッチ 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
設定ファイルのパス
デフォルトだと~/.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 git@github.com: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)がかなり整理できたのが収穫。