我正在尝试从VIM中的MAKE返回代码“成功的0,非零”。具体来说,我在Ubuntu上使用 v:shell_error 不起作用。

挖掘并看着 这个问题, 这似乎是因为我的shellpipe设置,那是

shellpipe=2>&1| tee

tee 将使输出返回VIM。 Shell显然正在将错误代码从TEE返回到VIM,而不是从Make返回。如何获得MAKE的错误代码?

有帮助吗?

解决方案

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

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

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

(在这里,'|'符号是VIM的命令分隔符。)将其分配给键盘快捷键将消除键入的需求。

PS我通常会尝试制作程序以不发出警告,因此我从未真正遇到过这个问题。 BTW导致了另一个可能的解决方案:只需使用EG删除警告(或简单的不需要输出线) grep -v tabooword 通过覆盖 'makeprg'. 。帮助中实际描述的是: :h 'makeprg'.

pps 我开始使用Vim ... 前提是您还将Bash用作外壳。您是否尝试将$ {pipestatus [0]}添加到ShellPipe中?例如:

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

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

其他提示

我目前唯一能想到的是为制造和T恤创建两个包装脚本。我敢肯定有一种更简单的方法,但是现在您可以尝试以下方法:

创建一个制作包装脚本:

#!/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 使用您的T恤包装器(shellpipe=2>&1 | mytee).

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top