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


Unity の為に使い始めた Xamarin Studio のコード自動整形が駄目過ぎだし、[改善の見込みも薄そう](http://forum.unity3d.com/threads/monodevelop-annoying-auto-indentation.213464/)なので、Vim で頑張ることにしたメモ。

ちなみに Mac OS X のハナシ。

# Mono

```sh
brew install mono
```

Mono 3.0.x 以上が必要。

* [Home | Mono](http://www.mono-project.com/)


# Vim

```sh
brew install vim --with-client-server --with-lua
```

Vim は Python 2.7.x と Lua を有効に。またクライアントサーバ機能も有効にする。


関連プラグインとしては以下を導入:

* [OmniSharp/omnisharp-vim](https://github.com/OmniSharp/omnisharp-vim)
* [OrangeT/vim-csharp](https://github.com/OrangeT/vim-csharp)
* [scrooloose/syntastic](https://github.com/scrooloose/syntastic)
* [Shougo/neocomplete.vim](https://github.com/Shougo/neocomplete.vim)

* [tpope/vim-dispatch](https://github.com/tpope/vim-dispatch)

プラグイン管理は [NeoBundle](https://github.com/Shougo/neobundle.vim) を使用。

 `.vimrc` へ一通り設定した後、Vim 起動時、下記コマンドでプラグインが自動インストールされる:

```
:NeoBundleInstall
```


## omnisharp-vim

### インストール

`.vimrc` に下記のように記述:

```vim
NeoBundleLazy 'OmniSharp/omnisharp-vim', {
\   'autoload': { 'filetypes': [ 'cs', 'csi', 'csx' ] },
\   'build': {
\     'windows' : 'msbuild server/OmniSharp.sln',
\     'mac': 'xbuild server/OmniSharp.sln',
\     'unix': 'xbuild server/OmniSharp.sln',
\   },
\ }
```

### 設定



## vim-csharp

C# のシンタックスハイライト。特に設定はしなくてもいいかな。

### インストール

`.vimrc` に下記のように記述:

```vim
NeoBundleLazy 'OrangeT/vim-csharp', { 'autoload': { 'filetypes': [ 'cs', 'csi', 'csx' ] } }
```


## syntastic

汎用的なシンタックスチェッカー。[おおかたの言語のチェック](https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers)に標準対応している。今日の Vim 界隈ではデファクトスタンダードなのかな。

### インストール

`.vimrc` に下記のように記述:

```vim
NeoBundle 'scrooloose/syntastic'
```

### 設定

`.vimrc` へ設定を記述。公式の推奨設定そのまま。

* [3. Recommended settings](https://github.com/scrooloose/syntastic#3-recommended-settings)


## neocomplete.vim

コード補完の要。設定は公式サイトの設定例に OmniSharp の設定を追加しただけ。

### インストール

`.vimrc` に下記のように記述:

```vim
NeoBundle 'Shougo/neocomplete.vim'
```

### 設定

`.vimrc` へ設定を記述。OmniSharp の Wiki を参考に。

* [Example NeoComplete settings · OmniSharp/omnisharp-vim Wiki](https://github.com/OmniSharp/omnisharp-vim/wiki/Example-NeoComplete-Settings)


## vim-dispatch

OmniSharp のローカルサーバーの起動管理を自動化するのに必要。特に設定はないみたい。

### インストール

`.vimrc` に下記のように記述:

```vim
NeoBundle 'tpope/vim-dispatch'
```


# Automator

Unity から直接コマンドを叩く事は出来ないので、Vim を呼び出すシェルスクリプトを Automator でアプリケーション化して、それを介して Vim を呼び出せるようにする。

```bash
#!/bin/bash

VIM="${HOME}/.homebrew/bin/vim"
CWD=${1%/*}

if [ 'VIM' == $(${VIM} --serverlist) ]
then
    ${VIM} --servername UNITY --remote-send "<Esc>:cd \"${CWD}\"<CR>"
    ${VIM} --servername UNITY --remote-tab "${1}"
fi

unset VIM CWD
```

![](https://qiita-image-store.s3.amazonaws.com/0/5051/d3d11ab8-7ec2-df35-2933-9a6dd1191ec0.png "Automator")


# Unity

ちなみに Unity の API はそのままだとコード補完が効かないので、Xamarin Studio を使用する場合と同じく "Sync MonoDevelop Project" を Unity 側から一度実行しておく。

![](https://qiita-image-store.s3.amazonaws.com/0/5051/14adb400-b8f2-0e41-4929-fecd2334680d.png "Sync MonoDevelop Project")


# 備考

Automator から直接;

```
vim --servername UNITY
```

みたいに呼んじゃうと、初回起動時見えないところで Vim サーバーが立ち上がっちゃうので、初回起動は手動でやってる。

AppleScript で Terminal 制御する方が良いかも知れないけど、TotalTerminal だと期待するような動作にならなかったので保留中。