7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vim8からneovimに移行したら変更点が多くて結構ハマった

Posted at

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なのでそっとしています。

カラースキーマ関係でおかしい場合の対処法は以下記事にまとまってあり、役に立つと思います。

Vim8とNeovimと私(Vim初心者) - Qiita

6. 使ってみて気づいたneovimのいいところ

atom userがneovimへ... - Qiita
とほぼ一緒ですが

  • featuresが基本全部入りなのでvim8みたいにその都度インストールし直さなくていい。
  • true colorやイタリックなどが反映されて以前よりきれいなターミナルになった。
  • :terminal で組み込みのterminalが呼べる

あたりが今の所気づいた良いところです。

true colorについては以下記事を参考にしてください。

  1. Homebrew 2.0.0リリース: Linuxbrewの統合

  2. pyenvで入れたPythonをNeoVimで使う - Qiita
    let g:python3_host_prog = $PYENV_ROOT . 'shims/python3'

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?