dein.vimをNeovimにインストールする @Windows10
確認環境
Spec / Version | |
---|---|
PC | mouse LB-J770X-SH2 |
OS | Windows10 Home (ver 1607 build 14393.693) |
neovim | v0.2.0-621-ge901868f |
neovim-qt | v0.2.4 |
今回やること
以前vimを使っていたときは、動作が重くなるのを嫌ってあまりプラグインを使っていませんでした。
しかし、今のPCになってサクサク動く予感がするので活用していこうかと思います。
まず今回はプラグインを管理する為のプラグインdein.vimをインストールします。
Python3をインストール
使いたいプラグインで何かとPython3が必要になりそうなので、この際インストールしちゃいます。
公式サイトからインストーラをダウンロードして入れて下さい。
何だかバージョンがたくさんありますが、私は一番新しい3.6.0をインストールしました。
ただし3.6.0の場合、次のneovimパッケージのインストールでひと悶着あるかもです。
少しでも手順を省きたい方は3.5.xで良いかと思います。
インストール手順は下記サイトが分かりやすいと思います。
Pythonをインストールする(for Windows) - Qiita
Python3のneovimパッケージをインストール
NeovimからPython3を使えるように、Pythonのneovimパッケージをインストールします。
コマンドプロンプトから下記コマンドを打ち込んでインストールして下さい。
> pip3 install neovim
何かエラー出た
私の場合、Python3.6.0をインストールしたら以下のようなエラーが出ました。
(Python3.5.3で試したところエラーは出ませんでした)
> pip3 install neovim Collecting neovim Using cached neovim-0.1.13.tar.gz Requirement already satisfied: msgpack-python>=0.4.0 in c:\users\username\appdata\local\programs\python\python36\lib\site-packages (from neovim) Collecting pyuv>=1.0.0 (from neovim) Using cached pyuv-1.3.0.tar.gz Collecting greenlet (from neovim) Using cached greenlet-0.4.12-cp36-cp36m-win_amd64.whl Installing collected packages: pyuv, greenlet, neovim Running setup.py install for pyuv ... error Exception: Traceback (most recent call last): File "c:\users\username\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 91: invalid start byte ~~~ 以下省略 ~~~
なんでやねん!
出ました。デコードエラーです。
日本は好きですが、こういうときだけ英語圏に生まれたかったと思います。
今は対策を調べる気力もないので、問題が出ているPythonスクリプトを直接弄りました。
よい子のみんなはマネしないでね!といいつつ、修正箇所を載せておきます。
#修正ファイル: %LOCALAPPDATA%\Programs\Python\Python36\Lib\site-packages\pip\compat\__init__.py #修正箇所: 75行目付近 if sys.version_info >= (3,): def console_to_str(s): try: return s.decode(sys.__stdout__.encoding) except UnicodeDecodeError: #return s.decode('utf_8') # 修正前 return s.decode('cp932') # 修正後
sys.__stdout__.encoding
の値を調べてみるとutf_8
になっていました。
それでエラーが出ているのにまたutf_8
を指定してデコードしようとしてエラー発生。
めでたくスクリプトが中止していたようです。
ひとまず上記の修正後、最初のpipコマンドを再実行したら無事にインストール出来ました。
dein.vimの設定とインストール
init.vimに以下の設定を追加して下さい。
"-------------------------------------------------- " プラグイン関連 "-------------------------------------------------- " Pythonのパス let g:python3_host_prog = fnameescape(expand('$LOCALAPPDATA\Programs\Python\Python36\python.exe')) " Neovim設定ディレクトリ let nvim_dir = substitute(expand($XDG_CONFIG_HOME) . '/nvim/', '\', '/', 'g') " deinの関連のパス let dein_path = 'github.com/Shougo/dein.vim' let dein_url = 'https://' . dein_path " プラグインをインストールするディレクトリ let s:dein_dir = nvim_dir . '.cache/dein/' " dein.vim 本体 let s:dein_repo_dir = s:dein_dir . 'repos/' . dein_path " dein.vimがなければインストールする if !isdirectory(s:dein_repo_dir) execute '!git clone ' . dein_url s:dein_repo_dir endif " dein.vimをruntimepathへ追加 let &runtimepath = s:dein_repo_dir . "," . &runtimepath " 設定開始 if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) " プラグインリストファイル let s:toml = nvim_dir . '/plugins.toml' let s:lazy_toml = nvim_dir . '/plugins_lazy.toml' " プラグインリストを読み込みキャッシュする call dein#load_toml(s:toml, {'lazy': 0}) call dein#load_toml(s:lazy_toml, {'lazy': 1}) " 設定終了 call dein#end() call dein#save_state() endif " 未インストールのプラグインがある場合はインストール if dein#check_install() call dein#install() endif
やっていることはざっくり以下です。
Python3のパスは、実際に皆さんがインストールしたパスに変えて下さい。
また、インストールディレクトリなどもお好みで。
参考)
プラグインリストの作成
次に、実際に読み込むプラグインのリストファイルを作ります。
といっても、まだ私自身よく理解できていないのでこちらのサイトのGo環境用の設定をそのまま追加しました。
Go開発環境の構築はきっとまた後日。
プラグインリストは、以下2つを用意しています。
#FILE: %XDG_CONFIG_HOME%/nvim/plugins.toml [[plugins]] repo = 'Shougo/dein.vim' [[plugins]] repo = 'neomake/neomake' hook_add = ''' autocmd! BufWritePost * Neomake '''
# File: %XDG_CONFIG_HOME%/nvim/plugins_lazy.toml [[plugins]] repo = 'fatih/vim-go' on_ft = 'go' hook_source = ''' let g:go_fmt_command = 'goimports' let s:goargs = go#package#ImportPath(expand('%:p:h')) let g:neomake_go_errcheck_maker = { \ 'args': ['-abspath', s:goargs], \ 'append_file': 0, \ 'errorformat': %f:%l:%c:\ %m, %f:%l:%c\ %#%m', \ } let g:neomake_go_enabled_makers = ['golint', 'govet', 'errcheck'] '''
Neovimの再起動
プラグインリスト作成後、Neovimを再起動して下さい。
初回起動時はdein.vim含めたプラグインのインストール処理が走るので、ちょっと固まったようになるかと思います。
Neovimのいつもの画面が表示されたら:messages
コマンドを実行し、以下のようなメッセージが表示されたらきっとちゃんと動いています。
ひとまずこれで無事、dein.vimによるプラグイン管理ができるようになりましたとさ。
おしまい。
<おまけ> has(‘python3’)が0になる問題
今回のプラグインには関係ないですが、Python3のパッケージ設定がうまくいかずにハマったので忘備録として。
Python3とneovimパッケージがインストール出来ていれば、Neovimから:echo has('python3')
コマンドを実行したときに1が返ってくるそうです。
ということでカタカタパーンと実行します。あれ、0が返ってきたぞ。。。
この問題はこちらのサイトを参考にしながら試行錯誤したものの解決出来ずに困っていたのですが、Neovimを本記事執筆時点の最新版(v0.2.0)にしたら何もせずとも1が返ってくるようになっていました。
開発者サマサマですね。ありがたや~。
もしNeovimを最新版にしても1が返ってこないときは、Neovimから下記コマンドを実行してインストールしたPythonのバージョンが返ってくるか確認してみて下さい。
:echo system([g:python3_host_prog, '--version'])
エラーが出る場合はg:python3_host_prog
のパス設定がうまくいってないので見直して下さいな。