代码之家  ›  专栏  ›  技术社区  ›  Ben Gartner

从make in vim获取Linux错误代码

  •  1
  • Ben Gartner  · 技术社区  · 16 年前

    我试图从make-in-vim获得“0 of success,nonzero if error”返回代码。具体来说,我在Ubuntu上使用 v:shell_error 不起作用。

    在四处挖掘和观察之后 this question, 这似乎是因为我的贝壳管设置,这是

    shellpipe=2>&1| tee

    这个 tee 将生成输出输送回VIM。shell显然正在将错误代码从tee返回到vim,而不是从make返回。如何获得make的错误代码?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Dummy00001    16 年前

    您可以尝试为此创建自定义函数。例如使用 :call system("make > make.out") 运行make将输出重定向到文件中。之后,使用加载错误文件 :cf make.out . 不过,我从未尝试过。

    最后,结果 make 也可以通过测试文件系统中是否存在结果来简单检查:

    :make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif
    

    (这里的“”符号是vim的命令分隔符。)将其分配给键盘快捷键将消除输入的需要。

    另外,我通常试图使我的程序不产生警告,所以我从来没有真正遇到过这个问题。btw导致了另一种可能的解决方案:只需使用例如 grep -v tabooword 通过重写 'makeprg' . 帮助中实际描述的内容: :h 'makeprg' .

    P.P.S. 我是从Vim开始的… 前提是您也使用bash作为shell。您是否尝试将退出的$PipeStatus[0]添加到ShellPipe?例如。:

    :set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}
    

    刚在Debian上测试过,对我很有用。 :h 'shellpipe' 更多。

        2
  •  1
  •   jkramer    16 年前

    我目前唯一能想到的就是为make和tee创建两个包装脚本。我相信有一个更简单的方法,但现在你可以试试这个:

    创建生成包装脚本:

    #!/bin/bash
    
    make $@
    echo $? > ~/exit_code_cache
    

    创建tee包装脚本:

    #!/bin/bash
    
    tee $@
    return `cat ~/exit_code_cache` # (or do something else with the exit code)
    

    使用新品牌 :set makeprg=mymake 并设置自己的 shellpipe 用你的T恤包装( shellpipe=2>&1 | mytee )

    它没有经过测试,但是这个想法应该是明确的。希望它有帮助。