【问题标题】:Getting the linux error code from make in Vim在 Vim 中从 make 获取 linux 错误代码
【发布时间】:2011-03-05 21:15:24
【问题描述】:

我正在尝试从 Vim 中的 make 获取“0 成功,如果错误则非零”返回码。具体来说,我在 Ubuntu 上使用 v:shell_error 不起作用。

在四处挖掘并查看this question,之后,这似乎是因为我的shellpipe设置,即

shellpipe=2>&1| tee

tee 通过管道将 make 输出返回到 vim。 shell 显然将错误代码从 tee 返回到 vim 而不是从 make 返回。如何获取 make 的错误代码?

【问题讨论】:

    标签: linux vim error-code


    【解决方案1】:

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

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

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

    (这里的 '|' 符号是 vim 的命令分隔符。)将其分配给键盘快捷键将无需键入。

    附:我通常试图让我的程序不产生警告,所以我从来没有真正遇到过这个问题。顺便说一句,导致另一种可能的解决方案:使用例如简单地删除警告(或简单地不需要的输出行)。 grep -v tabooword 通过覆盖 'makeprg' 来自 make 输出。帮助中实际描述的内容::h 'makeprg'.

    附言我开始使用 VIM... 前提是您还使用 bash 作为 shell。您是否尝试将出口 ${PIPESTATUS[0]} 添加到 shellpipe?例如:

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

    刚刚在 Debian 上进行了测试,它对我有用。 :h 'shellpipe' 了解更多。

    【讨论】:

      【解决方案2】:

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

      创建一个 make 包装脚本:

      #!/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,使用您的 tee 包装 (shellpipe=2>&1 | mytee)。

      它没有经过测试,但想法应该很清楚。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        相关资源
        最近更新 更多