我使用自定义函数(当前驻留在 .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
谢谢你的回答!

最佳答案

我使用 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

关于error-handling - Vim 脚本 : How to easily pipe data into the cwindow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7071682/

10-11 13:42