繁体   English   中英

从Vim中获取make的linux错误代码

[英]Getting the linux error code from make in Vim

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

在挖掘并查看这个问题后,似乎是因为我的shellpipe设置,这是

shellpipe=2>&1| tee

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

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

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

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

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

PS我通常会尝试让我的程序不发出任何警告,所以我从未真正遇到过这个问题。 什么BTW导致另一种可能的解决方案:通过覆盖'makeprg'使用例如来自make输出的grep -v tabooword简单地删除警告(或简单地不需要的输出线)。 实际上在帮助中描述了什么:h 'makeprg'

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

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

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

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

创建一个make包装器脚本:

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

创建一个T恤包装脚本:

#!/bin/bash

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

使用新的化妆:set makeprg=mymake并设置自己的shellpipe使用您的发球包装( shellpipe=2>&1 | mytee )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM