Vim脚本:如何轻松地将数据传输到窗口中

时间:2011-08-15 22:46:00

标签: error-handling vim

我使用自定义函数(当前驻留在.vimrc中)而不是:make或其他直接命令行工具来编译/检查我当前编辑的文件是否有错误。像这样:

function! CompileMyCode(...)
    set errorformat=Error:\ %m\\,\ in\ line\ %l
    let l:output = "Error: bad code!, in line 9"
    return l:output
endfunction
command! -nargs=* CompileMyCode :call CompileMyCode(<f-args>)

在命令模式下使用新命令时,不会显示错误窗口。

:CompileMyCode | cwindow

我做错了什么?

修改 我现在尝试了以下也没有打开任何cwindow。

function! CompileMyCode(...)
    set errorformat=Error:\ %m\\,\ in\ line\ %l
    let l:output = "Error: bad code!, in line 9"
    " I tried both of the following lines separately
    cexpr l:output 
    call setqflist([l:output])
endfunction

建议的命令cexprsetqflist()在我的示例中没有正确打开cwindow。也许有人可以提出完整的解决方案?

编辑2:

主要问题已经解决。这是我目前的代码:

    let l:result = expand("%").'|8| errortext'
    cexpr [ l:result, l:result ]
    caddexpr ''
    cwindow

此示例尊重vim似乎支持的默认错误格式。当cexpr实际错误输出并使用errorformat时,cwindow似乎忽略了这一点。

尽管如此,我还是希望在输出中坚持使用默认的错误格式,而不必依赖自定义errorformat

谢谢你的回答!

2 个答案:

答案 0 :(得分:3)

我使用cexpr l:output做了类似的事情,而不是返回字符串,并将编译的输出放在quickfix窗口中。你可以在这里看到我的vim功能:http://www.zenskg.net/wordpress/?p=199

更新

在quickfix列表中添加一个空行似乎允许显示cwindow。例如:

function! MyCompile()
  let l:output = "Error: line 1"
  cexpr l:output
  caddexpr ""
  cwindow
endfunction

答案 1 :(得分:2)

如果您已经可以在Vim中访问错误信息作为结构化数据(或者可以轻松获取),则可以使用setqflist()