久々にOmniSharpを更新しようとしたら、昔セットアップした頃に比べて、構成等がいろいろ変わっていたので、メモがてらにブログを書く。 詳細はこちらを参照されたい。
Installation
OmniSharp-vimの利用には以下が必要になる。
- Server
- OmniSharp-Roslyn
- OmniSharp-server
- レガシーサーバー
- Python
- Asynchronous command execution
- Vim with job control API is used (8.0+)
- neovim
- vim-dispatch
- vimproc.vim
- Selector UI
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 with job control API is used (8.0+)
- neovim
- vim-dispatch
- vimproc.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_mono
を1
として、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
でインストールできる。
以上。