Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

NeoVim、そしてdein.vimへ

$
0
0

NeoVim

新世代のVimその名もNeoVim
今までVimからの移行が面倒で使っていなかったのですが、使ってみると高速でちょっと嬉しいような機能も盛りだくさんでした。
Vimとの相違点を踏まえて、手早く移行するための記事になれば幸いです。

dein.vim

プラグインマネージャーです。
何やらneobundle.vimはバグフィックスのみになるらしく、今後はdein.vimを使って欲しいとのことでした。
こちらもめちゃくちゃ高速に動作します。

VimmerはShougo氏に足向けて寝ちゃいけない

これ一番言われてきてますから(私だけ)

Install

brew install neovim/neovim/neovim # mac

他のOSの方はインストール方法をみてください。
NeoVimはwikiにいろんな情報があって良いですぞこれ

Settings

.zshrc
# 省略...export XDG_CONFIG_HOME=$HOME/.config

# 省略...

NeoVimはXDG configurationというのをサポートしていまして、そのHOME_PATHを決められます。
私はテキトーに~/.configにしましたが、これはお好みで変更してください。

また私は設定ファイルが増えすぎることを極端に嫌うので、Vimと共用しています。
実際は今までのVimの設定ファイルなどにシンボリックリンク貼れば良いです。

ln -snfv ${HOME}/.vim ${HOME}/.config/nvim/
ln -snfv ${HOME}/.vimrc ${HOME}/.config/nvim/init.vim

VimとNeoVimで設定を分けたい場合は${XDG_CONFIG_HOME}/nvim/init.vimだけ作成すれば良いかと思います。

またターミナルのtrue colorを使用する場合は以下の設定を入れましょう。

.vimrc
" シンボリックリンクを使わない人は${XDG_CONFIG_HOME}/nvim/init.vimif has('nvim')let $NVIM_TUI_ENABLE_TRUE_COLOR=1endif

これでNeoVimの設定は終わりです。
厳密に言うと

  • if_ruby
  • if_lua
  • if_perl
  • if_mzscheme
  • if_tcl

がなくなっており、依存しているプラグインは動かなくなりますので別のプラグインを使用する必要があります。(これについては後述)
Vimとの違いはvim_diffにまとめられていますので、慎重に移行したい方は目を通しておくと良いのではないでしょうか。

Plugins Settings

どちらかというとdein.vimの方をメインに書きたかったので、ここからの方が長いです。
まずは設定を見てもらうのが良いでしょう。

.vimrc
" dein settings {{{if&compatiblesetnocompatibleendif" dein.vimのディレクトリlets:dein_dir = expand('~/.cache/dein')lets:dein_repo_dir =s:dein_dir . '/repos/github.com/Shougo/dein.vim'" なければgit cloneif!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

call dein#begin(s:dein_dir)" 管理するプラグインを記述したファイルlets:toml ='~/.dein.toml'lets:lazy_toml ='~/.dein_lazy.toml'" 読み込み、キャッシュは :call dein#clear_cache() で消せますif dein#load_cache([expand('<sfile>',s:toml,s:lazy_toml)])call dein#load_toml(s:toml, {'lazy': 0})call dein#load_toml(s:lazy_toml, {'lazy': 1})call dein#save_cache()endifcall dein#end()" vimprocだけは最初にインストールしてほしいif dein#check_install(['vimproc'])call dein#install(['vimproc'])endif" その他インストールしていないものはこちらに入れるif dein#check_install()call dein#install()endif" }}}

はい、プラグインはtoml形式で記述できるようになりました。

.dein.toml
[[plugins]]repo='Shougo/dein.vim'[[plugins]]repo='Shougo/vimproc'[plugins.build]windows='tools\\update-dll-mingw'cygwin='make-fmake_cygwin.mak'mac='make-fmake_mac.mak'linux='make'unix='gmake'[[plugins]]repo='Shougo/neosnippet-snippets'

基本的にはこの書き方になります。
遅延読み込みする方はこちらへ

.dein_lazy.toml
[[plugins]]repo='Shougo/neomru.vim'on_path='.*'[[plugins]]repo='jiangmiao/auto-pairs'on_i=1[[plugins]]repo='Shougo/neoyank.vim'on_path='.*'on_i=1[[plugins]]repo='Shougo/neosnippet'depends=['neosnippet-snippets']on_i=1on_ft=['snippet'][[plugins]]repo='Shougo/neocomplete'if='has("lua")'on_i=1[[plugins]]repo='Shougo/deoplete.nvim'if='has("nvim")'on_i=1[[plugins]]repo='Shougo/unite.vim'depends='neomru.vim'

neobundle.vimと同様にプラグインの読み込みタイミングには多くのオプションをつけることができます。

  • on_i 1を指定すると、インサートモードに入った時に読み込まれます
  • on_ft指定したファイルタイプの時に読み込まれます
  • on_pathバッファ名が一致した時に読み込まれます。.*を指定すると何かのファイルを開いた時に読み込まれるので、filerなどのプラグインで使うと便利です
  • on_source記載されたプラグインが読み込まれた後に読み込まれます
  • on_cmdコマンドが実行された時に読み込まれます。['Unite', 'UniteResume']のようなプラグインのコマンドを指定するかと思います
  • on_mapon_cmdのマッピング版で['<Plug>(neosnippet_expand_or_jump)']のように指定します
  • dependsプラグイン間で依存性がある場合に使います。ここに記述しても自動的にインストールされるわけじゃない点はneobundle.vimとは少し挙動が違うので要注意の人もいるかもしれません
  • if'has("nvim")などのように書いて条件に一致した場合のみ読み込まれます

多分よく使うのはここら辺かと思います。
オプションは他にもあるのでdein-optionsで見るか:help dein-optionsを参照してください。

先ほど記述した通り、一部のプラグインはNeoVimでは動きません。
有名なneocompletedeoplete.nvimに置き換えられます。
ifオプションなどでうまいことVimと分けてみだくさい。

Pythonは3のみをサポートしています。
以下のコマンドでpythonを有効化してください。

pip install neovim

dein.vim on_source

neobundleではプラグインが読み込まれた際に実行する挙動が書けました。

lets:hooks = neobundle#get("unite.vim")function!s:bundle.hooks.on_source(bundle)lets:ignore_globs = ['**/node_modules/**','**/vendor/bundle/**','**/bower_components/**','**/tmp/cache/**']
  call unite#custom#source('file_rec,file_rec/async','ignore_globs',s:ignore_globs)endfunction

これは以下のように書き換えられます。

.vimrc
" ...
augroup rc_autocmd
  autocmd!
augroup END

" ...call dein#begin(s:dein_dir)" ...if dein#tap('unite.vim')function!s:unite_ignore() abort
    lets:ignore_globs = ['**/node_modules/**','**/vendor/bundle/**','**/bower_components/**','**/tmp/cache/**']
    call unite#custom#source('file_rec,file_rec/async','ignore_globs',s:ignore_globs)endfunction

  execute 'autocmd rc_autocmd User''dein#source#' . g:dein#name 'call s:unite_ignore()'endif" ...call dein#end()" ...

autocmdというVimの機能を使います。
rc_autocmdは自分んで好きな名前に変換してください。

最後に

NeoVimとdein.vimとの出会いによって私のエディター生活はかなり高速になりました。
設定はそれほど時間がかからないと思うので使ってみてください。

P.S.
今まで使っていなかったけど:Unite file_rec/async:!が良すぎる、なぜ今まで気づかなかったのか...プロジェクト内のファイル一瞬で見つけられますやん。
あとneoyank.vim:Unite history/yankも優秀すぎる。
Shougo氏、本当にありがとうございます。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>