Help us understand the problem. What is going on with this article?

WindowsでUnityのコーディングをgvimで行う(OmniSharp-Vim)

More than 1 year has passed since last update.

OmniSharp-Vimを使えばVimでUnity(C#)のコーディングを行うときもインテリセンス機能を使えます

今まではVisual Studio Codeでコードを書いていたが,Unityと同時起動していると時々重く感じることがあったのでVimへの以降を試してみました.
以下のサイトを参考にしたのですが,いずれのページもそのままでは動かなかったので自分が導入できた時に行った変更点などを記します

参考ページ

使用環境

VimにPythonを導入する

デフォルトの状態では,Vim起動後に :echo has('python') と入力すると0が表示されました(Pythonが使用できない状態)
PythonのダウンロードページからPython2.7.15をインストールし,Python27ディレクトリの中にあったPython27.dllをVimと同じディレクトリに置きます.
再度Vimを起動し,:echo has('python')を入力すると,1が返されるようになりました.

NeoBundleのインストール

自分はLinux環境やWSLでは既にdein.vimを使用していますが,OmniSharp-Vimをインストール時にビルドするなどはっきりと分かっていない部分があったので一旦参考記事に従いNeoBundleを使用しました.
WindowsにGitをインストールし,windows vim 開発環境構築メモ(gvim + neobundle) - Qiitaに従いNeoBundleを導入しました.

OmniSharp-Vimのインストール,ビルド

ここが最も躓きました.

VimでUnity C#のコーディングをするための設定 - Yucchiy's blog
に従っていくとビルドに失敗しました.
もとのインストールスクリプトは以下の用になっていました.

vimrc
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',
      \   },
      \ }

まず一度目は,msbuild not found といった趣旨のエラーメッセージが発生しました.
Omnisharp導入でハマったところ - 踊るプログラマー でも同じようなエラーが出ており,MSBuild.exeの実行ファイルが存在するディレクトリをパスに追加すれば動いたとの報告もあったのですが,自分の環境では動作しませんでした.
そこで,NeoBundleのスクリプト内にMSBuild.exeのフルパスを渡すことでこのエラーは出力されなくなりました.
また,他のページでも書かれていたように/p:Platform="Any CPU" も追記したのですが,これが必須だったのかは確認できていません.

この状態でもビルドは通らなかったので,VimでUnity C#のコーディングをするための設定 - Yucchiy's blog
を確認すると,2年前の時点ですがビルドが通らないと書かれており,修正後のリポジトリが上げられていたのでそちらを利用するとビルドすることができました

修正後のvimrc

上記の修正を踏まえて,以下のように修正を行った結果,OmniSharp-Vimのインストール及びビルドに成功しました.

vimrc
NeoBundleLazy 'yucchiy/omnisharp-vim', {
      \   'autoload': { 'filetypes': [ 'cs', 'csi', 'csx' ] },
      \   'build': {
      \     'windows' : 'C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\MSBuild.exe server/OmniSharp.sln /p:Platform="Any CPU"',
      \     'mac': 'xbuild server/OmniSharp.sln',
      \     'unix': 'xbuild server/OmniSharp.sln',
      \   },
      \ }

OmniSharp-Vimでオムニ補完を利用する

NeoCompleteをあまり使ったことがなかったので,一旦 gvimでOmniSharpを使おうとすると“'omnifunc' は設定されていません”と出る - stack overflowにかかれている設定を利用しました.

vimrc
let g:acp_enableAtStartup = 0
let g:neocomplete#enable_at_startup = 1
let g:neocomplete#enable_smart_case = 1
let g:neocomplete#sources#syntax#min_keyword_length = 3
let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'
let g:neocomplete#sources#dictionary#dictionaries = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
    \ }
if !exists('g:neocomplete#keyword_patterns')
    let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'

autocmd FileType cs setlocal omnifunc=OmniSharp#Complete
if !exists('g:neocomplete#sources#omni#input_patterns')
  let g:neocomplete#sources#omni#input_patterns = {}
endif
let g:neocomplete#sources#omni#input_patterns.cs = '[^.]\.\%(\u\{2,}\)\?'

これで,コードを書いていくと,自動で補完が表示されます.

Unityからgvimを起動可能にする.

UnityのEditPreferenceExternal ToolExternal Script Editorでデフォルトで使用するエディタを変更できますが,ここで直接gvim.exeを指定すると常に新規ウィンドウで開いて,複数ファイルの編集が面倒だったので既にgvimが起動されている場合はタブとして起動するように変更を加えました.
gvimを起動するvim.batと,それをウィンドウ非表示のプロンプトから呼び出すvim.vbsの2つのスクリプトを作成し,UnityのExternal Script Editorにはvim.vbsを選択します

vim.bat
@echo off
"C:\Program Files\vim80-kaoriya-win64\gvim.exe" -p --remote-tab-silent "%1"
vim.vbs
CreateObject("WScript.Shell").Run """C:\Program Files\vim80-kaoriya-win64\vim.bat """ & Wscript.Arguments(0) ,0

Program Filesにスペースが含まれているのでダブルクォートを3つ使用しています.
Vimのディレクトリへのパスは必要に応じて変更してください.

完成

これで,Unityのコーディングをgvimでできるようになりました.
まだVimの操作に十分慣れている状態ではありませんが,上達すれば,従来の環境よりも効率よくコーディングできると思います.

WGG_SH
新卒エンジニアです ゲームとかWebとかVRとか
mfac
実際に人を動かすことを特徴とした位置情報連動型ゲーム及びサービスを開発しています。
http://www.mobilefactory.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした