3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WSL+Vim+YouCompleteMe+Unityの罠

Posted at

注意書き

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のツッコミ歓迎 :sunglasses:

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?