1. neovimに移行した背景
僕はこれまでvim8を、以下の理由からいくつかのfeature付きで使用していました。
- lua --> neocompleteがこれ入ってないと動かないから
- clipboard --> yankの内容をクリップボード連携したかったから
- mouse --> vimでマウス操作がたまにしたくなるから
さらにvimtexでPDFと.texの相互ジャンプを有効にするため、clientserverもつけて再インストールしようとしたときに
Homebrewのアップデートで--withオプションが使えなくなっていることに気づき、これを機にneovimに移行しようと決意しました。1
2. vimからの変更点
Nvim documentation: vim_diff
公式ドキュメントに載ってます。(またはneovim起動して:help
。)
またこちらの記事も参考になりました。
NeoVim、そしてdein.vimへ - Qiita
neovimはfeaturesが基本全部入り
vimでは、例えばluaやclipboard連携を使いたい場合、vim自体を$ brew install vim --with-lua --with-clipboard
などfeature付きでインストールする必要があった。これがneovimではなくなった。
neovimの:help feature-compile
によると、
Nvim always includes ALL features, in contrast to Vim (which ships with
various combinations of 100+ optional features). Think of it as a leaner
version of Vim's "HUGE" build. This reduces surface area for bugs, and
removes a common source of confusion and friction for users.
いくつかのfeaturesが使えなくなる
もう一つ大きな変更点は、if_ruby, if_luaなどが使えなくなった点。
:help nvim-features
ARCHITECTURE ~
External plugins run in separate processes. |remote-plugin| This improves
stability and allows those plugins to work without blocking the editor. Even
"legacy" Python and Ruby plugins which use the old Vim interfaces (|if_pyth|,
|if_ruby|) run out-of-process.
:help nvim-features-missing
Missing legacy features
Some legacy Vim features are not implemented:
- |if_py|: vim.bindeval() and vim.Function() are not supported
- |if_lua|: the
vim
object is missing some legacy methods - if_perl
- if_mzscheme
- if_tcl
自分はvimでneocompleteをつかっていたので、neovimでは使えなくなりました。
代わりにneovimのために設計されたdeopleteという補完プラグインがあるのでそれを使うことになります。
3. neocompleteとdeopleteを場合分けして使う
Shougo/deoplete.nvim: Dark powered asynchronous completion framework for neovim/Vim8
公式ドキュメントを見て設定する。
※ vim8の場合は操作が異なるので注意してください。
deopleteはpython3を使用します。以下をインストール。
pip3 --user --upgrade install neovim
vim-plugの場合、init.vimに以下を追記
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
let g:deoplete#enable_at_startup = 1
自分はpyenvを使用しているので、以下も追加。2
:echo has('python3')
で1がかえってきたらOKです。
自分の設定
neosnippetの設定も合わせて載せています。
deopleteの細かい設定は:help
を見る。
" ** autocomplete & snippet
if has("nvim")
Plug 'Shougo/deoplete.nvim', {'do': ':UpdateRemotePlugins'}
else
Plug 'Shougo/neocomplete.vim' "強力なコード補間機能 neocomplcacheの後継
endif
Plug 'Shougo/neosnippet.vim' " スニペット補完plugin
Plug 'Shougo/neosnippet-snippets' " デフォルトsnippet
" -----------------------------------------------
" ** neocomplete / deoplete
if has ("nvim")
" deoplete.nvim
" Use deoplete
let g:deoplete#enable_at_startup = 1
" pyenvで管理しているpython3を指定
let g:python3_host_prog = $PYENV_ROOT . '/shims/python3'
" <TAB>で選んで<Enter>で確定時に改行しない
inoremap <expr><CR> pumvisible() ? deoplete#close_popup() : "<CR>"
endif
" <TAB> completion (デフォルトは<C-n>で次候補)
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" -----------------------------------------------
" -----------------------------------------------
" ** neosnippet
"" Plugin key-mappings.
" Note: It must be "imap" and "smap". It uses <Plug> mappings.
imap <C-k> <Plug>(neosnippet_expand_or_jump)
smap <C-k> <Plug>(neosnippet_expand_or_jump)
xmap <C-k> <Plug>(neosnippet_expand_target)
" SuperTab like snippets behavior.
" Note: It must be "imap" and "smap". It uses <Plug> mappings.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
" For conceal markers.
if has('conceal')
set conceallevel=2 concealcursor=niv
endif
" neosnippet-snippetsのtex.snipを.latex拡張子だけじゃなく.tex拡張子できかせる
let g:tex_flavor='latex'
" -----------------------------------------------
4. +clientserverの代わりはpip3 install neovim-remote
にわかVimmerがNeovimに乗り換えたら戸惑ったという話 - 有馬総一郎のブログ
この記事が参考になりました。
このあとvimtexの方でSyncTeXができるように設定する予定ですが、ここでは割愛します。
5. その他neovimの設定で地味にハマったところ
.vimrcとのシンボリックリンク
neovimの設定ファイルとディレクトリの置き場 - neovim/vim入門
最初この記事を参考にシンボリックリンクを貼って.vimrcとinit.vimを共有しようと思ったのですが、自分がdotfilesの管理にmackupを使っていることが影響してか、(もしくはシンボリックリンクの貼り方が悪いのか)リンクが思うように行かなかったので、同期は諦めました。
そのかわり、init.vimを育てていく際にできるだけvimへの後方互換性をもたせるために場合分け等を書くようにしていこうと思います。
clipboardの設定でエラー
clipboardの設定で、autoselectを有効にしているとエラーが出た。なくてもいいので削除。
※ autoselectが有効にできれば、マウスで範囲選択しただけでクリップボードにコピーされるのでたまに便利ですが、nvimではもうこの機能はサポートしないということでしょうか。
カラースキーマの適用
.zshrcにexport TERM=xterm-256color
を設定しないとだめ
という記事を見て自分も設定したところ、powerlineを使っているせいか逆に色設定が変になりました。
.zshrcに書いたのを消して一度コマンドラインでecho $TERM
してみたところ、もともとTERM=xterm-256color
になっていました。
なぜ.zshrcに追記するとおかしくなるのか不明ですが、とりあえずそのままでOKなのでそっとしています。
カラースキーマ関係でおかしい場合の対処法は以下記事にまとまってあり、役に立つと思います。
6. 使ってみて気づいたneovimのいいところ
atom userがneovimへ... - Qiita
とほぼ一緒ですが
- featuresが基本全部入りなのでvim8みたいにその都度インストールし直さなくていい。
- true colorやイタリックなどが反映されて以前よりきれいなターミナルになった。
- :terminal で組み込みのterminalが呼べる
あたりが今の所気づいた良いところです。
true colorについては以下記事を参考にしてください。
- neovimでTrue Colorを使用してみる - なにかの記録
- ターミナル環境 (iTerm, vim, tmux) をフルカラーで使う - nakanishy's blog
- True color in iTerm2 Tmux Neovim | YUKIMEMI
-
pyenvで入れたPythonをNeoVimで使う - Qiita
let g:python3_host_prog = $PYENV_ROOT . 'shims/python3'
↩