注意書き
Vim以外のエディタに宗教上の理由で触れません。GUIを使いたくありません。
shellの黒い画面に引きこもって開発したいです。
育ちが悪いので言葉がアレです。用法用量に注意してお読みください。
なんでWSL?
今までMac+UnityでiOSやAndroidの開発してたんですが、仕事がVRになりました。
そう、VRの開発=Windows
Macに親しんだ人ならわかってくれると思うんですがWindowsは開発環境構築がメンドウクサイ…
まだ環境は定まっているわけではないのですが、似たような状況の人はきっといるだろうと思い、
ハマった罠についてアウトプットします。
WindowsでMacみたいな爆速zsh環境がいつか来るといいなぁ…。頑張れWSLもっと頑張れ。
Windows+Unityで生成した.slnをUbuntuのVim+YouCompleteMeで
Unityは.slnをプロジェクトからよしなに生成してくれます。
VisualStudioで読み込んですぐバリバリ開発できますねヤッタァー
あんかクソ重いエディタ使えるか。テキストオブジェクト使えないとか化石
さてWSLをいれてUbuntu内でVim+YouCompleteMeでプロジェクトを読み込んでみましょう。
自前で作成したクラス群は補完がちゃんと効くと思いますが、
UnityEngineなどUnityEngine.dllで定義されてるクラス群が補完できませんね。
諦めてVisualStudioしないでください。訓練されたVimmerは諦めない。
Vim内で:YcmDebugInfo
だッ!
上記コマンドを叩くと読み込んだslnのpathやlogのpathが表示されます。
今回見るべきはOmniSharp logfile: /path/to/hogefugapiyo_stdout_hogehoge.log
になります。
そのlogを追ってみるとUnityEngine.dllがLoad Errorになっているログが吐かれています。
そのpathを見るにC:\path\to\Unity\
になっていませんか?
WSLの設定にもよるかと思うのですが少なくとも自分はUbuntu側からのpathは
/mnt/c/path/to/Unity
以下略にUnityEngine.dllがいなければならないはず。
犯人はこいつです。
というわけで修正です。
Unityはよしななタイミングで.slnや.csprojを更新するのでテキトーなFunctionでも作っておいて、
即座に修正できるようにしておきましょう。
command! ModifyCSProjFile :call ModifyCSProjFile()
function! ModifyCSProjFile()
:!find . -maxdepth 2 -name "*.csproj" | xargs sed -i -e 's/C:/\/mnt\/c/g'
:!find . -maxdepth 2 -name "*.csproj" | xargs sed -i -e 's/D:/\/mnt\/d/g'
:YcmCompleter ReloadSolution
endfunction
あんまりVimScript感がありませんが動いてるからイイノデス。
Vimmerのツッコミ歓迎