NixOS で Vim プラグイン deoplete.nvim を使えるようにする
TL;DR
deoplete.nvim のインストールには, vim の Python3 サポートだけではなく, pynvim も必要です. そのため, 以下のように configuration.nix を追記してビルドしました.
environment.systemPackages = with pkgs; [ ... (vim_configurable.override { python = python39.withPackages (ps: with ps; [ pynvim ]); }) ... ];
しかし, pynvim を vim から見つけられず, エラーになってしまいました.
[vim-hug-neovim-rpc] requires one of `:pythonx import [pynvim|neovim]` command to work
この問題を解決するために, python3 のパッケージも追加でインストールし, deoplete.nvim を使えるようにしました.
environment.systemPackages = with pkgs; [ ... (python39.withPackages (ps: with ps; [ pynvim ])) (vim_configurable.override { python = python39; }) ... ];
説明すること
NixOSでのVimのインストール方法
システムに vim をインストールしたい場合は, /etc/nixos/configuration.nix を編集して, nixos-rebuild でビルドしてシステム設定を切り替えます. 一方, ユーザーの場合は nix-env 等でインストールします. 本記事では, 便宜的にシステムにインストールする場合の話に限定します.
vim インストールは他のパッケージと同様に, 以下のように environment.systemPackages にパッケージ名を追加すればできます. 自分のインストールしたいパッケージがあるかを調べたい場合は, ここで調べると良いです. vim パッケージは他にも vimHugeX, vim_configurable といくつか種類がありますが, 設定をいじることができる vim_configurable がおすすめです. また, vimHugeX は vim_configurable のエイリアスです.
environment.systemPackages = with pkgs; [ vim_configurable ];
Python3サポートされたVimのインストール方法
NixOS WikiのVimの記事を参考に, 以下のように記述します.
environment.systemPackages = with pkgs; [ ... (vim_configurable.override { python = python3; }) ... ];
インストールできたかの確認は以下の方法で確認できます.
deoplete.nvim を入れた際のエラーとその解消方法
deoplete.nvim は入力補完用のプラグインです. deoplete.nvim のインストールには, vim の python3 サポートと pynvim が必要になります. そこで, NixOS WikiのPythonの記事を参考に, 以下のように記述しました.
with pkgs; let packages = python-packages: with python-packages; [ pynvim ]; python-with-my-packages = python3.withPackages my-python-packages; in ... environment.systemPackages = with pkgs; [ ... (vim_configurable.override { python = python-with-my-packages; }) ... ];
そして, 以下のプラグインをインストールしました. 下2つは deoplete.nvim を使うのに必要なプラグインです. ちなみに, プラグインのインストール方法は省略します. 私は vim-plug を使用しました.
- Shougo/deoplete.nvim
- roxma/vim-hug-neovim-rpc
- roxma/nvim-yarp
これで無事 deoplete.nvim が使えるようになっていれば御の字ですが, 実際は, 以下のエラーメッセージがでてしまいました.
[vim-hug-neovim-rpc] requires one of `:pythonx import [pynvim|neovim]` command to work...
調べたところ, 上記でインストールした pynvim は, /nix/store 直下にパッケージとしてインストールされている一方, python のサードパーティライブラリが保存される site-packages にはインストールされていないようでした.
このエラーを解決するために色々と格闘した結果, 以下のように追加で python もインストールすることで解消されました.
environment.systemPackages = with pkgs; [ ... (python39.withPackages (ps: with ps; [ pynvim ])) (vim_configurable.override { python = python39; }) ... ];
以下で vim の python は, 新しくインストールされた python パッケージをみることが確認できました.
vim上で :pythonx import sys; print(sys.path) [ '/nix/store/qmaczi731dgiip22am4js0b0k574z6wl-python3-3.9.2-env/lib/python39.zip', '/nix/store/qmaczi731dgiip22am4js0b0k574z6wl-python3-3.9.2-env/lib/python3.9', '/nix/store/qmaczi731dgiip22am4js0b0k574z6wl-python3-3.9.2-env/lib/python3.9/lib-dynload', '/nix/store/qmaczi731dgiip22am4js0b0k574z6wl-python3-3.9.2-env/lib/python3.9/site-packages', '_vim_path_' ] 端末上で readlink `which python` /nix/store/qmaczi731dgiip22am4js0b0k574z6wl-python3-3.9.2-env/bin/python