この記事はVim Advent Calendar 2018 3日目の記事です。
Windows10でのneovim-qtとPython環境、プラグイン管理のdeinのインストールと、はまったところの対応方法など。
インストール
本体のインストール
パッケージマネージャのchocolateyやscoopが使えますが、まずchocolateyを入れるのが若干手間ですね。
あと、インストールされる場所もユーザーフォルダ内だったりと、若干微妙です。
ということで、自分はビルド済みバイナリを取ってきてProgram Files/Neovimに配置してます。
Pythonのインストール
必須のプラグインが多いので、併せてインストールします。
Python公式 から .msi インストーラーを取ってきてウィザードをポチポチでいけます。
Pythonの実行環境はなくてもNeoVim自体は動きます。
ただし、Pythonインストール済みの環境ですと後述のNeoVim用APIを入れないとNeoVimが起動しない場合があります。
NeoVimではリモートプラグインという仕組みによって、デフォルトでPython、Node.js、Go、Luaの各言語のプラグインに対応します。
参考: Neovim のリモートプラグインを利用して好きな言語でプラグインを書く blog.syfm
PipからNeoVim用APIをインストール
> pip install pynvim
Pythonのパッケージ管理でNeoVim用APIをインストールします。
スクリーンショットでは古いパッケージ名のneovimを指定しています。
ログではneovim.tar.gzファイルとpynvim.tar.gzファイルの2つをダウンロードしてきてるのが確認できます。
VC++ 14が必要です。入ってなければエラーで止まります。
Build Tools for Visual Studioをダウンロードして、C++ビルドツール、V14xビルドツールのC++/CLIサポート、V14xビルドツール用モジュール、Windows10 SDKあたりを入れてください。
Pipパッケージ管理が入ってない場合は、.msiインストーラから修正インストールで行けると思います。
環境変数(パス)の設定
Pythonのインストール時に指定できますが、確認します。
通ってなかったら追記します。
AppData\Local\Programs\Python\Python37-32
AppData\Local\Programs\Python\Python37-32\Scripts
また、neovim.exeへパスを通しておくと、コマンドプロンプト/PowerShellでNeoVimが使えます。
Pythonの実行パスをinit.vimで指定
NeoVimからPythonが実行できるように、init.vimで設定します。
NeoVimで :checkhealth
を実行。結果が新規タブで下記のように表示されます。
health#provider#check
========================================================================
## Clipboard (optional)
- OK: Clipboard tool found: win32yank
## Python 2 provider (optional)
~~~中略~~~
## Python 3 provider (optional)
- INFO: `g:python3_host_prog` is not set. Searching for python in the environment.
- INFO: Multiple python executables found. Set `g:python3_host_prog` to avoid surprises.
- INFO: Executable: C:\Users\akiya\AppData\Local\Programs\Python\Python37-32\python
- INFO: Other python executable: /python
- INFO: Python3 version: 3.7.0
- INFO: python-neovim version: 0.3.1
- OK: Latest python-neovim is installed: 0.3.1
-INFO:
g:python3_host_prog
is not set. Searching for python in the environment.
- INFO: Executable: C:\Users\akiya\AppData\Local\Programs\Python\Python37-32\python
実行可能なPythonが検出されていますので、AppData\nvim\init.vimでこのパスを指定します。
let g:python3_host_prog = 'C:\Users\akiya\AppData\Local\Programs\Python\Python37-32\python'
:echo has('python3')
を実行、1が返ってくれば正しくPythonが使えます。
deinのインストール
”Dark powered Vim/Neovim plugin manager”ことdeinを入れます。
公式リポジトリにインストール用シェルスクリプトがありますので、Git Bashから実行するという手もありますが…
ユーザーフォルダに.cache以下のフォルダを作ってinit.vimに設定を書きます。
自分はdeinでdein自身を管理するために、deinが生成するフォルダ構造に合わせています。
"dein Scripts-----------------------------
if &compatible
set nocompatible " Be iMproved
endif
" Required:
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
" Required:
if dein#load_state('C:\Users\akiya\.cache\dein')
call dein#begin('C:\Users\akiya\.cache\dein')
" Let dein manage dein
" Required:
call dein#add('C:\Users\akiya\.cache\dein\repos\github.com\Shougo\dein.vim')
call dein#load_toml( 'C:\Users\akiya\AppData\Local\nvim\dein.toml')
" Required:
call dein#end()
call dein#save_state()
endif
" Required:
filetype plugin indent on
syntax enable
"End dein Scripts-------------------------
rutimepathに、dein.vimフォルダまでのパスを設定。
call dein#begin
の引数のパスはrepos
フォルダの入っているフォルダのパス。
dein自身をdeinで管理する場合は、
call dein#add('C:\Users\akiya\.cache\dein\repos\github.com\Shougo\dein.vim')
でパスを指定します。
dein#add()
でプラグインを指定。
call dein#load_toml
で、.tomlファイルに書いたプラグインの設定を読み込ませることができます。
NeoVimで:call dein#install()
すれば、dein#add()
で指定したプラグインが入ります。
ちなみにクイックスタート用のシェルスクリプトを実行すると、上記のようなinit.vim貼付用のコードが返ってきます。
プラグイン
大体はVimのプラグインがそのまま動きますので、NeoVimで入れ直したプラグインというと…
Shougoさんのが多いです、足を向けて寝られません。
というか、私はDeopleteを使いたかったのでNeoVimに乗り換えたようなものです。
リントツールはVimで定番のsyntasticがNeoVimに対応していません。
そこでALEを入れています。動作が高速で助かります。
vim-gitgutterがNeoVimでは動かなかったのですが、今GitHub見たら対応してるみたいです。
他、不具合の対処方法やカスタマイズ
init.vimでエラーがあると起動しない
Neovim is taking too long to respond
ちょっとしたタイポでもこのような画面になってしまい、どうにもならなくなります。
init.vimを移動したりファイル名を変更したりして、素のNeoVimが起動するか試しましょう。
:source init.vim
でエラーがなくてもダメな場合があります。
---2019年11月 追記---
v0.4.3でPythonインストール済みの場合は、pynvimパッケージを入れないとこのエラー画面が出て起動しませんでした。
---2019年6月 追記---
2019年5月末リリースのNeoVim 0.3.7では、起動後にinit.vimのエラーがコマンドラインに流れるようになりました。
また、swapファイルが残っていてもグレーアウトしてしまうことがあるので、AppData\Local\nvim-data\swap
を確認してみてください。
プラグイン管理で動かないのがある
WindowsのUAC(ユーザーアカウント制御)の関係で動かないのがありました。
deinは大丈夫です、plugは去年はダメでした(最新版ではいけそうです)
deinも書き込み権限の要るフォルダは無理なようです。
.cache/dein
が無難だと思います。
フォント変更はginit.vim
ユーザーフォルダのAppData\Local\nvim内に ginit.vimを配置してGUI向けの設定を書きます。
Guifont! Migu\ 2M:h14
call GuiWindowMaximized(1)
フォント名に空白が含まれる場合はエスケープします。
画面を最大化して起動もここで指定できます。
ウィンドウサイズも指定できたと思います。
terminalの設定
:terminal でシェルを実行できます。
デフォルトではcmdが起動しますが、PowerShellに変えることもできます。
set shell=powershell.exe
set shellcmdflag=-NoProfile\ -NoLogo\ -NonInteractive\ -Command
また、エスケープを押してもノーマルモードに戻れないので、Escキーにキーアサインを設定します。
tnoremap <silent> <ESC> <C-\><C-n>
WindowsにもOpenSSHの波がようやく到達したので、NeoVimからvagrant ssh
もできますよ!
最後に
deinのインストールはinit.vimから記憶を頼りに書いたのであやふやな感じになってしまいました。
また、Windowsでの動作は確認していないプラグインも割とあったりします。
OSS全般、Windows対応のリソースは不足気味だそうで、Windowsユーザーの皆さん、ふるってご参加ください。
Issue立てるだけでも十分な貢献になります。