（失敗）Neovimに移行しつつHaskellの開発環境を整える on Windows

# はじめに

最近のHaskellの開発ツールは、昔からある[ghc-mod](https://hackage.haskell.org/package/ghc-mod)だけでなく、[hsdev](http://hackage.haskell.org/package/hsdev)だったり[haskell-ide-engine](https://github.com/haskell/haskell-ide-engine)だったり[ide-backend](https://github.com/fpco/ide-backend)などなど、いろいろ出てきていますが、[この辺](http://qiita.com/hiratara/items/a963960f7593db4b43ab)とかで紹介されている[intero](https://github.com/commercialhaskell/intero)を今回は試したくなったので、[Neovimからinteroの機能を使うプラグイン](https://github.com/parsonsmatt/intero-neovim)を入れるべく、Neovimの導入から始めてみたよ、という欲張りなお話です。
結論から言うと、**Windows版のNeovimは現状Neovimの`terminal!`コマンドをサポートしていないため、intero-neovimも使えないようです**。
更新があればまたお伝えします...。

# 試した環境

- Windows 10 Home 64bit (ver. 1607)
- stack v1.0.4 (そういえばこっちは最新版じゃない...)
- LTS Haskell 7.7

(Bash for Windowsは使ってません)

# Neovimのインストール

Windows版はまだexperimentalとのことですが、[公式サイトの説明](https://github.com/neovim/neovim/wiki/Installing-Neovim#windows)や[Windowsでneovimを使う（改訂版1） - koturnの日記](http://koturn.hatenablog.com/entry/2016/10/18/010000)どおりの方法でインストールできました。

# 設定

`echo has('nvim')`と実行してみたらNeovimの場合`1`が、Vimの場合`0`が返ってきたので、Vimと設定を共存したい場合はこれを使って頑張ればよいみたいです。

と、言うわけで :point_down: のような設定を追加しました。

```vim
if has('nvim')
  if has('win32')
    " 既存のvimfilesディレクトリーをruntimepathに追加する。
    set rtp^=~/vimfiles
    set rtp+=~/vimfiles/after

    " if_pythonの設定に挑戦した跡。実際にはうまくいってない
    let g:python_host_prog = 'C:\Program Files\Python35-32\python.exe'
  else

    " 普段からLinuxと設定を共有しているので、
    " ~/.vimもruntimepathに追加する。
    set rtp^=~/.vim
    set rtp+=~/.vim/after
  endif

  " 個人的に好きなカラースキーム。
  " Vimの場合はgvimrcに書いていたが、
  " Neovimでは無効そうな設定が大半を占めていたので個別にここに設定することにした
  colorscheme koehler
endif
```

# interoのインストール

普通に`stack install intero`するだけですが、その前に`global-project/stack.yaml`を確認し、`resolver`ができるだけ新しいLTS Haskellになっていることを確認しましょう（現在は7.7）。
intero-neovimはintero ver. 0.1.16以上を推奨しているので、なるべく新しいバージョンを入れるためです。

Windowsの場合、`global-project/stack.yaml`は`<stackをインストールしたディレクトリー>/global-project/stack.yaml`にあります。
MacやLinuxの場合`~/.stack/global-project/stack.yaml`のはずです。

# intero-neovim のインストール

ようやく本題です。
Neovim専用なので、やはり`has('nvim')`な場合のみロードされるよう、次のようにして設定しました。
最近乗り換えた[dein.vim](https://github.com/Shougo/dein.vim)を使用しています。
neobundleやvim-plugなどをお使いの方も似たようなやり方でインストールしましょう。

```vim
call dein#add('parsonsmatt/intero-neovim', { 'if': "has('nvim')" })
```

... で、やってみたんですが、どうやらintero-neovimはNeovimの`terminal!`コマンドに依存しているらしく、
今回Windowsに入れたバージョンのNeovimではサポートされていない機能のようです... :sob:
`terminal!`コマンドの呼び出しでこけてしまいました。早く気づけ...。

# ほかにも設定失敗したもの

一応載せておきます。

## Python interfaceのインストール（失敗）

[denite.vim](https://github.com/Shougo/denite.nvim)や[deoplete.vim](https://github.com/Shougo/deoplete.nvim)など、Vim・NeovimのPythonサポートが必要なプラグインも一緒に導入するため、Pythonもインストールすることにしました。
安心と信頼のShougoさんプロダクトです。

Python自体のインストールは普通に[python.org](https://www.python.org/downloads/)から行いました。
（64bit版にしたい方は間違えて32bit版をインストールしないよう気をつけましょう。`python-3.5.2-amd64-webinstall.exe`などが正しいファイル名です。）

が、インストールしただけではどうやらNeovimのPython 3インターフェースは有効にならないようなので、
次のコマンドを**管理者権限**で実行しました。

```
python -m pip install --upgrade pip
pip3 install neovim
```

残念ながら、それでも`if_python`は有効になりませんでした。
[このへん](https://github.com/neovim/neovim/issues/5360)によるとWindows版ではどうもmasterで修正済みのバグがあるようです。
まぁ、今回はあくまでもHaskellの開発環境が目的なので、deoplete.vimやdenite.vimはまたの機会にしましょう。
deoplete.vimが使えないのがちょっと痛いかも...。

# 参考にしたもろもろのページ

- [Vimが落ちる時はif\_python等を疑ってみよう - Humanity](http://tyru.hatenablog.com/entry/20140720/vim_crash_when_loading_unmatched_python_dll)
- [NeoBundle から dein.vim に乗り換えたら爆速だった話 - Qiita](http://qiita.com/delphinus/items/00ff2c0ba972c6e41542)