2011-02-18
■[vim][開発環境]compile_error.vim
QuickRun で出力されるコンパイルエラーを解析して、unite で出力する source を適当に書いてみました。
[compile_error.vim]
" コンパイルエラーのエラーメッセージを解析して、unite で表示する source " " 対応コンパイラ " gcc function! s:gcc_error(source) let error_pattern="[A-D]:.\*:.\*:.\*:.\*:.\*" if a:source !~ error_pattern return {} endif let errors=split(a:source, ":") return { \ 'file' : errors[0].":".errors[1], \ 'line' : errors[2], \ 'col' : errors[3], \ 'error' : errors[4], \ 'message' : errors[5] \ } endfunctio function! s:analyzer_error(source) return s:gcc_error(a:source) endfunction function! s:get_buffer_errors() let lines=getbufline('%', 1, '$') let result=[] for line in lines let error=s:analyzer_error(line) if empty(error) continue endif call add(result, error) endfor return result endfunction "-------------------------------------- " unite-source "-------------------------------------- function! unite#sources#compile_error#define() return s:source endfunction let s:source = { \ 'name' : 'compile_error', \} function! s:source.gather_candidates(args, context) let result=[] for error in s:get_buffer_errors() call add(result, { \ "word" : fnamemodify(error.file, ":t").":".error.message, \ "source" : error.error, \ "kind" : "file", \ "action__path" : error.file \ }) endfo return result endfunction
機能的にはエラーが出ている箇所のファイルを開くだけですね。
とりあえず、形にはなっている……かな?
例によって、vim script は、かなりやっつけで書いているので、とてもうさんくさいです。
もう誰か代わりに書いてください。
正規表現とかリスト型とか辞書型とか頭が痛い……。
あ、ちなみに ':' で、split しているので、エラーメッセージに ':' が含まれているとアウトです。
あと適当に表示させてますけど、unite 的に'file''source'でした、の使い方は間違っていますよね?(errro や warning を表示している辺り)
うーん、もうちょっと unite に慣れていきたい。
(操作的な意味でも、表示的な意味でも)
将来性(?)
とりあえず、msvc のエラーメッセージの解析かなぁー。
gcc より、ちょっとめんどくさそうです。
あと、エラーを選択しているときに、リアルタイムでバッファにエラー箇所(ソース)が表示されるとかって出来るのかな?
うーん、やりたい事はまだまだありそうだ。
トラックバック - http://d.hatena.ne.jp/osyo-manga/20110218/1297989997
リンク元
- 91 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 35 http://pipes.yahoo.com/pipes/pipe.info?_id=04913f684f1141e0b48179f97811ce12
- 4 http://reader.livedoor.com/reader/
- 3 http://d.hatena.ne.jp/keyword/正規表現
- 3 http://d.hatena.ne.jp/keyword/neocomplcache
- 3 http://twitter.com/
- 3 http://www.google.co.jp/search?hl=ja&client=safari&rls=en&q=boost+fusion+bind&aq=f&aqi=&aql=&oq=
- 2 http://d.hatena.ne.jp/melpon/
- 2 http://k.hatena.ne.jp/keywordblog/vim
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=nnm&rls=Palemoon:en-US:unofficial&q=clang+vim&aq=f&aqi=&aql=&oq=
