题
我正在尝试从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
).
它没有经过测试,但是这个想法应该很清楚。希望能帮助到你。