vim をベースとしたエディタ、いわゆる Vim系エディタ / Vimクローン / Vimフォークには様々な種類があります。
その中でも2015年以降にもっとも存在感を高めているのが neovim です。
この neovim を理解しようとすると、それぞれが多彩な表現をされていて、イマイチふに落ちません。
そこでこの記事では、neovim について Vim 初心者でも分かりやすく理解できるように詳しく紹介します。
neovim とは何か?
neovim は、拡張性と使いやすさのために刷新したVim派生テキストエディタです。つまり、過去に改善を積み重ねてきた Vim を作り直し、スリム化とモダンな機能を搭載した新たな Vim ということになります。
この説明で理解できるなら、この記事にたどり着いていないのではないでしょうか。
そこで、いくつか neovim を表現している記事を集めてみました。
neovim は nvim とよく略されます。また、頭文字が大文字(Neovim)だったり、小文字(neovim)だったり、表記がまちまちです。本サイトでは小文字を採用しています。
公式サイトの「neovim」
公式サイトでは下記のように表現されています。
Neovim is a refactor, and sometimes redactor, in the tradition of Vim (which itself derives from Stevie). It is not a rewrite but a continuation and extension of Vim. Many clones and derivatives exist, some very clever—but none are Vim. Neovim is built for users who want the good parts of Vim, and more.
About – Neovim
あくまでコントリビュータによる理念なので、実態としては…というのはありますが、こういうものだそうです。上記のページには、目標が記載されているので、もっと深く知りたい人は読んでおくと良いでしょう。
それよりも、次のように目指していないことも明確に記載されています。
Non-goals
About – Neovim
* Turn Vim into an IDE
* Limit third-party applications (such as IDEs!) built with Neovim
* Deprecate VimL
* POSIX vi-compatibility
これを理解することが、他の Vim派生エディタとの違いとして理解するのには役立ちそうです。個人的には、POSIXの互換性は目指さず、IDE化していくわけではないという点が差別化として大きいように感じました。
GitHub の 「neovimとは?」
neovim プロジェクトの GitHub では下記のように表現されています。
Neovim is a project that seeks to aggressively refactor Vim in order to:
neovim/neovim: Vim-fork focused on extensibility and usability
* Simplify maintenance and encourage contributions
* Split the work between multiple developers
* Enable advanced UIs without modifications to the core
* Maximize extensibility
こちらの方が位置付けについて、もう少し明確に表しているように感じますね。
しかしまだまだ分かりにくい気がします。
メディア記事による「neovimとは?」
以前、neovim v0.3 がリリースされた際の記事には、次のように紹介されています。
NeovimはVimの良い部分はそのままに拡張性と使い勝手にフォーカスしたというテキストエディタ。コアを改変することなく高度なUIを導入し、非同期のジョブ管理など複数の開発者で作業を分ける機能も備え、メンテナンスも簡便にした。clojure、lisp、go、haskell、lua、javascript、perl、python、ruby、rustなどの言語にAPIを介してアクセスできる。ほとんどのVimのプラグインと互換性があるという。
Vimフォークのテキストエディタ「Neovim 0.3」公開 | OSDN Magazine
さすがにメディア記事らしく、分かりやすい表現がされていますね。
結局 neovim の位置付けとは
筆者が理解する上では下記の通りです。
- メンテナーを複数人で分担して開発を高速化していて、先進的な機能の導入に積極的
- 目指すは「Vim の置き換え」ではなく「Vim 拡大」 not「IDE化」
- 標準状態で有効になってる機能が多い
今時点の実態はともかく、このような目指す方向性が大違いのようです。これが分かると利用するかの可否判断しやすいですね。
正直なところ、基本機能部分に大差があるわけではありません。一方で、「新しい機能をバンバン使いたい!」という Vimmer には向いているのは間違いなさそうです。
neovim の特徴
neovim を理解する上では、vim との違いを明確にしていくのが良いと思いますので、下記にまとめました。
機能比較
特徴的な機能の差分については、下記となります。なお、標準状態かつプラグイン無しの場合、Linux / Windows版という前提です。
主な実装機能(差分のみ)
比較軸 | neovim | vim 8.1 |
---|---|---|
API実装 | 有 | 無 |
非同期処理 | 標準搭載 | 要プラグイン |
XDGサポート | 採用 | 不採用 |
リモートプラグイン | 採用 | 不採用 |
:checkhealth | 採用 | 不採用 |
:Man | 採用 | 不採用 |
標準設定(差分のみ)
比較軸 | neovim | vim 8.1 |
---|---|---|
設定ファイル | $XDG_CONFIG_HOME/nvim/init.vim (Windows: %XDG_CONFIG_HOME%\nvim\init.vim) | ~/.vimrc (Windows: %USERPROFILE%\_vimrc) |
関連ディレクトリ | $XDG_CONFIG_HOME/nvim (Windows: %XDG_CONFIG_HOME%\nvim\) | ~/.vim/ (Windows: %USERPROFILE%\vim\) |
セッション情報 | $XDG_DATA_HOME/nvim/shada/main.shada (Windows: %XDG_DATA_HOME%\nvim\shada\main.shada) | ~/.viminfo (Windows: %USERPROFILE%\.viminfo) |
シンタックスハイライト (Syntax highlighting) | 有効 | 無効 |
:filetype plugin indent on | 有効 | 無効 |
autoindent | 有効 | 無効 |
autoread | 有効 | 無効 |
backupdir | $XDG_DATA_HOME/.local/share/nvim/backup (Windows: %XDG_DATA_HOME%\nvim\shada\main.shada) | .,~/tmp,~/ |
belloff | all | 設定無し |
complete | i | .,w,b,u,t,i |
cscopeverbose | 有効 | 無効 |
directory | $XDG_DATA_HOME/.local/share/nvim/swap (Windows: %XDG_DATA_HOME%\nvim\swap) 自動作成 | ./~/tmp,/var/tmp,/tmp |
display | lastline,msgsep | truncate |
formatoptions | tcqj | tcq |
history | 10000 | 200 |
hlsearch | 有効 | 無効 |
langremap | 無効 | 無効 |
laststatus | 2 | 1 |
listchars | tab:> ,trail:–,nbsp:+ | eol:$ |
sessionoptions | options除く | options含む |
shortmess | F含む、S除く | filnxtToOS |
sidescroll | 1 | 0 |
smarttab | 有効 | 無効 |
tabpagemax | 50 | 10 |
tags | ./tags;,tags | ./tags,./TAGS,tags,TAGS |
ttimeoutlen | 50 | 100 |
ttyfast | 常時有効 | 無効 |
undodir | $XDG_DATA_HOME/.local/share/nvim/undo (Windows: %XDG_DATA_HOME%\nvim\undo) 自動作成 | カレントディレクトリ |
viminfo | ! 含む | ! 含まない |
wildoptions | pum,tagfile | 無効 |
man.vim プラグイン | 有効 | 無効 |
matchit プラグイン | 有効 | 無効 |
バージョンによっては、:terminal のように Vim 本体が取り入れた機能もあるため、これらの機能差は永続的なものとは言えない点は注意が必要です。
また、あくまでデフォルト値ですので、設定ファイルで設定すれば有効になります。しかし、もし有効にしたい設定値がデフォルト有効であれば、それだけ設定ファイルの行数を減らせるのは良い点といえます。
nvim から提供されている詳細な比較情報は、こちらで公開されています。Vimscriptで利用する設定値や細かいコマンドの違いはこちらをご覧ください。
思想・開発体制の比較
比較軸 | neovim | vim |
開発体制 | コントリビュータ多数制 | コミッター1人体制(Bran Moolenaar氏) |
フル開発者 | 有り(参照 :help donate) | 無し |
思想 | 革新的(Vimとの比較上) | 保守的 |
経緯
neovim 開発の経緯を知っておくのは理解を深める上で役に立ちます。とはいえ、年表があるわけではないので、様々な情報から拾ったものを時系列に羅列してみました。
2015年 | neovim v0.1 リリース |
2016年 | |
2017年 | neovim v0.2 リリース Vimconf 2017 では、Vimmer の30〜40%が利用しているとの報告があった。 |
2018年 | neovim v0.3 リリース |
2019年 | neovim v0.4 リリース |
直近3年間は v0.1/年 の速度で開発されていますね。
ちなみに、neovim 安定版(Stable) はこちらです。
neovim を使い始めるなら
次のメリットを把握したうえで、選ぶとよいでしょう。
neovim の強み・メリット
- 多くのコントリビュータ・フルタイム開発者による開発スピードの速さ
- 新機能・パッチの取り込みに積極的な姿勢
- XDGサポート
- 多くの新しい機能がデフォルトで有効
- 拡張性の高さ(プラグインだけでなく、GUIの外部実装なども可)
- わずかに高速(本体の起動ほか)
- Vimプラグインの大半がそのまま使える(完全に全て使えるわけではない)
neovim の弱み・デメリット
- OS初期状態では、標準インストールされない(=インストール&初期設定が必須)
- OS標準エディタにするには、いくつも設定が必要
- 機能性の分、起動時間がわずかに Vim に劣る
- ユーザー数が Vim より少ない(=情報量が劣る)
- 日本語での情報も Vim より少ない(標準でのヘルプの日本語化など)
neovim GUI版
次のように nvim-qt (nvim-qt.exe) があります。
ターミナルではなくウインドウで扱いた方は、こちらを使うとよいでしょう。