読者です 読者をやめる 読者になる 読者になる

Omnisharp導入でハマったところ

vim c#

Unityでゲームを作るときに、VimにOmnisharpというプラグインを入れておくと便利と聞いて導入してみました。

が、いろいろハマったのでメモ。

自分の環境は、Windows10(Bootcamp)でVim7.4(Kaoriya版)


導入には以下のサイトを参考にさせていただきました。

Vim で C# を書くなら OmniSharp で決まり! - 永遠に未完成

Unity 用に IntelliSense 環境を Vim で実現するメモ - Qiita


インストールはNeoBundleで

NeoBundle 'tpope/vim-dispatch'
NeoBundleLazy 'OrangeT/vim-csharp', { 'autoload': { 'filetypes': [ 'cs', 'csi', 'csx' ] } }
NeoBundleLazy 'nosami/Omnisharp', {
\ 'autoload': {'filetypes': ['cs']},
\ 'build': {
\ 'windows': 'MSBuild.exe server/OmniSharp.sln /p:Platform="Any CPU"',
\ 'mac': 'xbuild server/OmniSharp.sln',
\ 'unix': 'xbuild server/OmniSharp.sln',
\ }
\ }

 

vim-dispatch、vim-csharpも一緒に入れておくと良いという話だったので、それらも一緒にインストール。

 

あと、

autocmd FileType cs set omnifunc=OmniSharp#Complete

もvimrcに追記しておきます。

最初のハマり。サーバーのビルドがうまくいかない。

Omnisharpはサーバーを立ち上げます。まずは、そのサーバーアプリをビルドしないといけないのですが、私の環境ではMSBuild.exeにパスが通っていなかったのが問題でした。

MSBuild.exeは、
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
にあります。(バージョンは適宜読み替えていただいて。)

しかし、結局、ここにパスを通してもNeoBundleではビルドがうまくいきませんでした。ちょっと原因が分からなかったので手動でビルドすることに。


コマンドプロンプトからOmnisharpプラグインフォルダ以下のserverフォルダに移動してビルド

cd server
MSBuild.exe /p:Platform="Any CPU"

これでサーバーアプリは出来上がったもののOmnisharpは、まだうまく動作しませんでした。


第二のハマりポイント。has('python')が0

Omnisharpは、vim上で

:echo has('python')

とした時に、1がプリントされる環境(Vimpythonインターフェースが使える環境)でないと動きません。
これには、まずVimが+pythonでビルドされている必要があります。

vim上で

:version

としてみると、Kaoriya版Vimは +python でビルドされていることが分かりました。なのでVimの方は問題ない。

has('python')が1になるためには、もうひとつ条件があってpythonのあるところにpathが通っている必要があります。

 

なんということでしょう。そもそも自分のWindows環境にはpythonがインストールされていませんでした。

 

さらにVimのbitバージョンとPythonのbitバージョンを揃えないとhas('python')は0になるそうです。

 

自分は64bit版Vimを使っていたのでPythonも64bitバージョンをインストールしました。

これで、has('python')が1を返すようになってくれました。一歩前進。


第三のハマり。VimPythonインターフェースがうまく動かない

前2個のハマりは、すぐに解決したのですが、3つめがなかなか分かりませんでした。Omnisharpを使おうと、<c-x><c-o>すると、

ごめんなさい。site モジュールが読み込めませんでした。

というようなエラーメッセージが出ました。(正確な文言はちょっと違ったかも...)

試しに、

:python print('hello')

としても、同じようなエラーが出ます。

 

いろいろネット上の情報を漁っていたら、どうやらVimをビルドした時のpythonと、自分のところにあるpythonのバージョンが違うと、そういうメッセージが出ることあるよ。というのを見つけました。

 

このときは最新の2.7系、python2.7.11をインストールしていたのですが、試しに一個下の、python2.7.10をインストールしてみたところ、とうとうOmnisharpが動き出しました!

 

2.7.10のダウンロードは以下から

Python Release Python 2.7.10 | Python.org

 

ちなみに、Omnisharpの説明書には32bitバージョンを使ってくれって書いていたので、最終的には32bitバージョンのvim&pythonを使ってます。

 

Mac

ちなみにMac環境では比較的簡単に導入できました。

まずはxbuildコマンドを使うためにmonoをインストール。

Download | Mono

そのあとslnファイルを作るために、一回、Unity上で「Open C# Project」をします。

 

f:id:wkpn:20160303213117p:plain

 その後C#のファイルをVimで開いたらいけました!

 

Omnisharp感動的な便利さ!超嬉しい!