24
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VimAdvent Calendar 2018

Day 3

WindowsにNeoVimをセットアップ in 2018

Last updated at Posted at 2018-12-03

この記事はVim Advent Calendar 2018 3日目の記事です。

Windows10でのneovim-qtとPython環境、プラグイン管理のdeinのインストールと、はまったところの対応方法など。

インストール

本体のインストール

パッケージマネージャのchocolateyscoopが使えますが、まずchocolateyを入れるのが若干手間ですね。
あと、インストールされる場所もユーザーフォルダ内だったりと、若干微妙です。

ということで、自分はビルド済みバイナリを取ってきてProgram Files/Neovimに配置してます。

programfiles.png

Pythonのインストール

必須のプラグインが多いので、併せてインストールします。
Python公式 から .msi インストーラーを取ってきてウィザードをポチポチでいけます。

Pythonの実行環境はなくてもNeoVim自体は動きます。
ただし、Pythonインストール済みの環境ですと後述のNeoVim用APIを入れないとNeoVimが起動しない場合があります。

NeoVimではリモートプラグインという仕組みによって、デフォルトでPython、Node.js、Go、Luaの各言語のプラグインに対応します。

参考: Neovim のリモートプラグインを利用して好きな言語でプラグインを書く blog.syfm

PipからNeoVim用APIをインストール

pip_install_neovim.png

> 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インストーラから修正インストールで行けると思います。

環境変数(パス)の設定

path_env.png

Pythonのインストール時に指定できますが、確認します。
通ってなかったら追記します。

AppData\Local\Programs\Python\Python37-32

AppData\Local\Programs\Python\Python37-32\Scripts

また、neovim.exeへパスを通しておくと、コマンドプロンプト/PowerShellでNeoVimが使えます。

Power Shellから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が使えます。

healthcheck.png

deinのインストール

”Dark powered Vim/Neovim plugin manager”ことdeinを入れます。

公式リポジトリにインストール用シェルスクリプトがありますので、Git Bashから実行するという手もありますが…

ユーザーフォルダに.cache以下のフォルダを作ってinit.vimに設定を書きます。
自分はdeinでdein自身を管理するために、deinが生成するフォルダ構造に合わせています。

dein_folder.png

"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でエラーがあると起動しない

grayout.png

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立てるだけでも十分な貢献になります。

24
30
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?