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 に慣れていきたい。
(操作的な意味でも、表示的な意味でも)