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がしっかり分離されているっぽい
- サードパーティが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') " Neovim用の設定 else " Vim用の設定 endif
もし、論理を反転したい場合は、has
の前に!
をつければいい。
if !has('nvim') " Vim用の設定 endif
複数の環境で設定ファイルを共通化したい場合
OSによる分岐
if has('wsl') " WSL(Windows Subsisytem for Linux) elseif has('win32') " Windows(32 or 64bit) elseif has('unix') " UNIX系OS (FreeBSDもこれ) endif
Neovimのマニュアルにはmac
が無いけど、unix
に含まれるのだろうか。
下のサイトさんでは使える雰囲気だけど、最新状況は不明...
ホスト名による分岐
if hostname()=='myhost' " ホスト名がmyhostのPC else " その他のホスト名のPC endif
インストール済みPythonによる分岐
if has('python3') " Python3系インストール済み elseif has('python2') " Python2系インストール済み endif if has('pythonx') " 何れかのバージョンのPythonインストール済み else " Python未インストール endif
特定のコマンドが使用可否での分岐
if executable('rg') " rgコマンド実行可能 else " rgコマンド実行不可 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 " これだと's:my_undodir'という文字列が設定される let &undodir=s:my_undodir " オプション名に&をつけてletすればOK
最後に
ひとまずこれで、Neovimが起動できて、設定するファイルも分かったと思う。
使い方については、こちらの戯言で紹介したサイトさんや本を参考にして頂きたい。
次回は、最低限やっておきたい設定をざっくり紹介しようと思う。
参考
- GitHub - neovim/neovim: Vim-fork focused on extensibility and usability
- Neovimがどういうプロジェクトなのかまとめ - Qiita
- vimrc分割した - 藻ログ
以上。