[英]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.