RoslynベースのOmniSharp/omnisharp-vimをMacで試す

久々にOmniSharpを更新しようとしたら、昔セットアップした頃に比べて、構成等がいろいろ変わっていたので、メモがてらにブログを書く。 詳細はこちらを参照されたい。

Installation

OmniSharp-vimの利用には以下が必要になる。

Server

OmniSharp-vimにはOmniSharp/omnisharp-roslynが必要となる。

OmniSharp-roslynは、名前の通りRoslynベースの言語サーバーである。

パッケージは、こちらにビルド済みのものが配布されているが、今回は自分でビルドすることにする。 詳細はこちらが参考にするとよい。

ビルドするためには、.NET 4.6なので、事前にインストールしておく必要がある。

またmacOSでビルド・実行するにはMono5.2.0が必要である。インストールは.pkgか、Homebrewを用いるとよい。

brew update
brew install mono
brew install caskroom/cask/mono-mdk

ソースをビルドするには、OmniSharp/omnisharp-roslynレポジトリを落としてきて、build.shを実行する。

cd Path/To/omnisharp-roslyn
./build.sh

ビルドが成功すると、artifacts/publish/OmniSharp.Http.Driver/OmniSharp.exeが生成される。

Python

Pythonが利用可能かどうかは以下のコマンドを実行する

:echo has('python')

Asynchronous command execution

OmniSharp-vimは、次の条件を満たしている場合のみ、サーバーをの起動、非同期ビルドを実行できる。

Vim 8.0以上であれば、Job control APIを利用し、またneovimを利用していれば特になにもしなくて良さそう。 この条件に当てはまらなければ、vim-dispatchかvimproc.vimをインストールすればよい。

How to Use

まずはOmniSharp-vimはインストールする。NeoBundleからインストールするには、以下を.vimrcに記述する

NeoBundleLazy 'OmniSharp/omnisharp-vim', {
      \   'autoload': { 'filetypes': [ 'cs', 'csi', 'csx' ] },
      \ }

Roslynを言語サーバーとして利用するには以下のように設定する。

OmniSharp_server_typeは、2018/07/01現在のレポジトリではroslynになっているが、念の為指定する。 OmniSharp_server_pathには、先程作成したOmniSharp.exeのパスを指定する。

また、MacOSで実行するにはMonoが必要になる。そのためOmniSharp_server_use_mono1として、monoで実行するようにする。

let g:OmniSharp_server_type='roslyn'
let g:OmniSharp_server_path = '/Path/To/OmniSharp.exe'
let g:OmniSharp_server_use_mono = 1

OmniSharp-Roslynにはlibuvが必要になる。 MacであればHomebrew経由で、brew install libuvでインストールできる。

以上。