Vimか、Neovimか。 それが問題だ。
(言ってみたかっただけ)
つまらん概要は要らん、迷わずNeovim使うぞという人は「やること」へGo!
確認環境
|
|
PC |
Thinkpad X1 Carbon 2nd Gen |
OS |
FreeBSD 12.1-RELEASE-p1 |
Neovim |
NVIM v0.4.3 |
Neovimとは?
NeovimはVimをリファクトしてスリムにしてメンテしやすくしようというプロジェクト。
以前はプラグインとの非同期連携と組込TerminalがNeovimの売りだと思ってたけど、
どちらも既にVimに実装されたっぽい。 (ただ、最近のVimを使ってないので詳細は分からんとです)
今でもVimに対して有利な点があるとすれば、以下の点かなぁと思う。
- プラグイン開発に好きな言語が使える(APIがあれば)
- API提供言語: C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust
- VimScriptが分からない人でも得意な言語で作れる ⇒ 開発者増加の期待
- でもプラグイン開発言語のビルド環境や実行環境が必要になるデメリットがある
- Luaを標準にしたいっぽい (かといってVimScriptを廃止することはない)
- エディタとしてのコア機能とUIがしっかり分離されているっぽい
逆にNeovimの不利な点というより、個人的に不満なのは以下の点。
- 何か調べたいとき、Vimより情報が少ない
- とはいえ、Vimとほぼ共通でいけることも多い
- プラグイン系の情報はちょっと少なめな印象
- migemoでインクリメンタルサーチができない。ツラい
- コマンドウィンドウを使った
:Migemo
検索ならできる
- kaoriyaさんパッチのNeovim版、、、というよりプラグイン作ればいけるのかしら
Vimとの違いはこちらを確認されたし。
これからのNeovimが知りたい人は公式のロードマップを確認されたし。
次のバージョン0.5ではついにLSPクライアントが実装されるっぽい。
(本記事執筆時点ではnightlyリリースされてるっぽい)
やること
今回は、以下について説明する。
- Neovimのインストール
- Neovimの設定ファイル
- 設定ファイルの補足
- 設定ファイルを分割したい場合
- Vimと設定ファイルを共通化したい場合
- 複数の環境で設定ファイルを共通化したい場合
Neovimのインストール
以下のコマンドを打ち込むだけ。(管理者権限で実行してね)
> pkg install neovim
インストールが無事に終われば、nvim
コマンドでNeovimを起動できるよ。
Neovimの設定ファイルの作成
Neovimと設定ディレクトリと設定ファイルは以下の通り。
|
Vim |
Neovim |
設定ディレクトリ |
~/.vim |
~/$XDG_CONFIG_HOME/nvim |
設定ファイル |
~/.vimrc |
~/$XDG_CONFIG_HOME/nvim/init.vim |
環境変数$XDG_CONFIG_HOME
が未定義の場合、設定ファイルは~/.config/nvim/init.vim
になる。
ササッと作っちゃおう。
> mkdir -p ~/.config/nvim
> touch ~/.config/nvim/init.vim
設定ファイル補足
設定ファイルを分割したい場合
設定ファイルが長くなってくると、複数のファイルに分割したくなるかもしれない。
僕の場合は、init.vim
の他にキーバインド設定用を別ファイルに分けている。
各プラグインのキーバインドも含めてそのファイルに記述している感じ。
init.vim
は他のファイルを読み込む処理しか書いてない人もいる。
自分が好きな方法で分割すればいいし、もちろん分割しなくてもいい。
ただ、設定ファイルの構成は最初に決めておいた方がいいと思う。
後からファイルを分割する場合、分割時にどこかミスって何か変になった!ってなるかも。
他の設定ファイル(VimScript)を読み込むコマンド
設定ファイルを分ける場合は、init.vim
から下記のようにsource
コマンドで読み込む設定ファイルを指定すればいい。
source ~/.config/nvim/keymap.vim
他にも、runtime
コマンドを使う方法がある。
ワイルドカードが使えるので指定ディレクトリ以下の一括指定ができる。
runtime! myconfigs/init/*.vim
こちらはruntimepath
に設定されているディレクトリリストから、指定のファイルを探す為、予めruntimepath
をセットしておく必要がある。
runtimepath
の設定値が知りたい場合は、:set runtimepath?
で確認できる。
~/.config/nvim
はデフォルトでセットされていると思う。
Vimと設定ファイルを共通化したい場合
基本的にNeovimにはVimと同じオプションがあると思っていい。
ないものはエラーが出るし、ヘルプも存在しないのですぐに気付くと思う。
ただ、VimとNeovimでデフォルト値が違うものは結構ある。
設定ファイルを共通化するなら各オプションは明示的に指定した方がいい。
Vimと設定ファイルを共通化している人は、下のようにリンクを貼って設定ファイルを共通化している人が多そうだ。
※既に.vim
や.vimrc
がある人は削除なり移動なりさせて実行してね
※$XDG_CONFIG_HOME
を定義してない人は直接パスを指定してね
> ln -s $XDG_CONFIG_HOME/nvim ~/.vim
> ln -s $XDG_CONFIG_HOME/nvim/init.vim ~/.vimrc
もし、NeovimもしくはVimだけでしか使えない設定がある場合、下のifで切り分ければOK。
if has('nvim')
else
endif
もし、論理を反転したい場合は、has
の前に!
をつければいい。
if !has('nvim')
endif
複数の環境で設定ファイルを共通化したい場合
OSによる分岐
if has('wsl')
elseif has('win32')
elseif has('unix')
endif
Neovimのマニュアルにはmac
が無いけど、unix
に含まれるのだろうか。
下のサイトさんでは使える雰囲気だけど、最新状況は不明...
ホスト名による分岐
if hostname()=='myhost'
else
endif
インストール済みPythonによる分岐
if has('python3')
elseif has('python2')
endif
if has('pythonx')
else
endif
特定のコマンドが使用可否での分岐
if executable('rg')
else
endif
パスの設定
諸々のパス指定では、環境変数を活用したりVimScript変数に代入しておいた方が共通化しやすいかもしれない。
if has('unix')
let g:my_file=expand("$HOME/my/path/.file")
elseif has('win32') || has('win64')
let g:my_file=expand("$HOME/my/path/_file")
endif
ただ、オプション設定のset
では展開されないっぽいので注意。
下のようにすればいい。
let s:my_undodir=expand("$HOME/nvim/undo")
set undodir=s:my_undodir
let &undodir=s:my_undodir
最後に
ひとまずこれで、Neovimが起動できて、設定するファイルも分かったと思う。
使い方については、こちらの戯言で紹介したサイトさんや本を参考にして頂きたい。
次回は、最低限やっておきたい設定をざっくり紹介しようと思う。
参考
以上。