VimからXcodeを使わずにビルドしてみた。cocoa.vim必須?
Vimにcocoa.vimを導入してからすっかりXcodeはビルド用になってます。
Vim + cocoa.vimで少し不満だったのが、エラーをみたいときにいちいちXcodeとVimとをいったりきたりしないといけないというところ。わがままなのかもしれないですが、どうせならVimだけでさくっと確認したいなぁ〜と。
そんなわけでからXcodeを使わずに文法チェック(というかビルドしてるという。。。)するための設定をしてみました。
autocmd FileType objc nnoremap <buffer> <C-9> :call XcodeBuildCheck()<CR>
autocmd FileType objc inoremap <buffer> <C-9> <C-o>:call XcodeBuildCheck()<CR>
function! XcodeBuildCheck() "{{{
let proj_dir = substitute(b:cocoa_proj, '\(.*\)\/.*' , '\1', '')
let proj_file = substitute(b:cocoa_proj, '\(.*\)\/\(.*\)', '\2', '')
let current_dir = getcwd()
execute ":lcd " . escape(expand(proj_dir), " #\\")
let error_message = system( 'xcodebuild -project ' . escape(expand(proj_file), " #\\") .' -activetarget -activeconfiguration')
echo error_message
execute ":lcd " . escape(expand(current_dir), " #\\")
endfunction
上のコードを.vimrcに追加するとXcodeプロジェクトに含まれているファイルを編集しているときにControl+9を押すとシステムのxcodebuildというコマンドを呼び出してビルドをしてくれて、ビルド結果が表示されるようになります。Xcodeをいちいち立ち上げしなくてもビルドできるので楽ちんです♪
やりたかったけど、できなかったこと
- error_messageを整形するなりして表示されるメッセージを綺麗にしたかった。
- QuickFixのウィンドウに表示して、エラー行にすぐに飛べるようにしたかった。
1つ目の「メッセージの整形」は、substitute()をつかって抽出できるかな?と試してみたのですが、うまくいかず。2つ目の「QuickFixウィンドウを使う」はできるのかどうかもわからない。そんな状態になってます。VimScriptってよくわからないんですよね。。。。そんなわけでだれか作ってくれないかなぁ〜なんて思ってしまいます。
Objective-CでVimを動かせないかな。。。。
ともあれ、Xcodeを使わずにVimだけでビルドができる & 文法エラーもチェックできるので、ぜひぜひ試してみてください。
というわけで、たかともでした。
ちなみにb:cocoa_projが取得できればcocoa.vimはいらないです。こんな感じ。
if exists('b:cocoa_proj')
finish
endif
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h'), '*.xcodeproj'))
" Search a few levels up to see if we can find the project file
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h:h'), '*.xcodeproj'))
endif
endif
endif
autocmd FileType objc setlocal makeprg=xcodebuild\ -activetarget\ -activeconfiguration
をしておいて、ビルドするときに:lcdでxcodeprojがあるディレクトリにいって:makeする方法を見つけて、泣きそうです。
まぁ、いちいち:lcdしなくてもいい利点はあるものの、やってしまった感が。。。。
