🦍

Neovimを始めた話

2020/12/10に公開
2

初めに

11月中旬くらいからNeovimを使い始めました。
Neovim自体は以前から知っていたが、自分が普段作っているプラグインがVimでしか動かないことや、Vimでだいたい満足しているのでなかなか使おうって気になれませんでした。

そこでgh.vimというプラグインのNeovim対応をするため、Neovimをビルドしてから少しずつNeovimを使うようになりました。
今日はVimを使ってきた筆者がNeovimを少し使った感想の話をしていきます。

NeovimとVimの違い

Vimは後方互換を大事にしているので劇的な変化があまりないのに対して、
Neovimは時代に合わせてよりモダンな技術を積極的に取り入れる、というスタンスの違いがあるように感じています。

Neovimのモダンな技術といえば次でしょうか。(ほかにもっとあるかもしれないが…)

  • ターミナル
  • LSP(builtin)
  • リモートプラグイン
  • Floating windows

実際まだNeovimを使って1ヵ月も経っていないんですが、気になるVimとの差異の部分について説明していきます。

ターミナル

NeovimとVimのターミナルの挙動が割と違っていて、Neovimの場合は:terminalで現在のバッファをそのまま使います。
対してVimはsplitしてから画面上部にターミナルが表示さるような動きで、現在のバッファを使うかどうかはオプションで指定できます。

:terminal ++curwin

Neovimで現在のバッファを使いたくないときは次のように、で新しいバッファを開いてからターミナルを実行できます。

`:new term://${SHELL}`

NeovimのターミナルはNormalモードで開始するためそのままでは入力できないので、
そのままターミナルを使いたい場合は次の設定が必要です。

augroup neovim-terminal
  au!
  au TermOpen * startinsert
augroup END

これが結構使いづらいなと感じたところでした。

また、NeovimではターミナルのNormalモードは<C-\><C-N>というとても打ちづらい(JISキーボード勢なので)キーマップになっています。
Vimでは<C-w><C-N>になって打ちやすい分、ターミナルで<C-w>をつかって単語を消せないというツライ部分があります。
一応Vimではtermwinkey<C-w>を変えられますが…

こんな感じでお互い一長一短なところがあります。

カーソル

Neovimでは挿入モードでカーソルの形が|に変わります。これは個人的にわかりやすくてよいなと思いました。
これVimでも設定で再現できないかなと考えていますが、多分難しいでしょうね…

Vim script

Neovimの処理速度がすこし速いようです。
体感ではありますが、Neovimの動画はVimと比べて軽快な感触があります。

実際次のscriptを使って、処理時間を図ってみました。

fun! s:sum() abort
  let sum = 0
  for i in range(2999999)
    let sum+=i
  endfor
endfun

let start = reltime()
for _ in range(5)
  call s:sum()
endfor
echo reltimestr(reltime(start))

どうやら体感が正しかったようです。Neovimのが約2秒弱速かったです。

秒数
Vim 19.632893
Neovim 17.632039

関数

VimにあってNeovimにない関数や、同じような機能だけどIFが異なっている関数がいくつかありました。
こういった差異が結構プラグイン作者の頭を悩ませるなぁとプラグインを作っていて思いました。

たとえば、win_execute()という関数はNeovimにはなく、
特定のWindowで何か処理を行うにはwin_gotoid()で一度ウィンドウに移動しなければ行けないです。
また、job機能はVim/NeovimともにありますがIFが異なっているので、これもまたやっかいです。

このように、使用感はさほど変わらないけど、少し深いところに足を踏み込むと異なるところがちょいちょいあります。
両方で動作するプラグインを作っているダークパワーを身にまとっている人はやはりすごいなとあらためて思いました。

最後に

一部ではありますが、Neovimについて筆者が感じていることを書きました。
もうしばらくNeovim/Vimを交互に使ってみたいと思っています。

最近ではNeovimがLuaに舵を切ったり、VimはVim9 scriptをガシガシ作ったりしています。
とお互い違う道を歩み始めた感がありますが、Vim/Neovimの良さはそれぞれあるので、みなさんも両方使ってみると新しい世界が見えるかもしれません。

では、よいVim/Neovimライフを。

Discussion

kuukuu

vimrc読書会で誰かがやっているのを見たんですが、これを書くとVimでもカーソルの形が変化するようになりますね

let &t_ti .= "\e[1 q"
let &t_SI .= "\e[5 q"
let &t_EI .= "\e[1 q"
let &t_te .= "\e[0 q"