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がプリントされる環境(Vimのpythonインターフェースが使える環境)でないと動きません。
これには、まず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を返すようになってくれました。一歩前進。
第三のハマり。VimのPythonインターフェースがうまく動かない
前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をインストール。
そのあとslnファイルを作るために、一回、Unity上で「Open C# Project」をします。
Omnisharp感動的な便利さ!超嬉しい!