我正在尝试从 Vim 中的 make 获取“0 成功,如果错误则非零”返回码。具体来说,我在 Ubuntu 上并且使用v:shell_error
不起作用。
挖了一圈看了看这个问题,好像是因为我的shellpipe设置,也就是
shellpipe=2>&1| tee
tee
管道将 make 输出返回到 vim 。shell 显然将错误代码从 tee 返回到 vim 而不是从 make 返回。我如何获得make的错误代码?
我正在尝试从 Vim 中的 make 获取“0 成功,如果错误则非零”返回码。具体来说,我在 Ubuntu 上并且使用v:shell_error
不起作用。
挖了一圈看了看这个问题,好像是因为我的shellpipe设置,也就是
shellpipe=2>&1| tee
tee
管道将 make 输出返回到 vim 。shell 显然将错误代码从 tee 返回到 vim 而不是从 make 返回。我如何获得make的错误代码?
您可以尝试为此制作自定义功能。例如,使用:call system("make > make.out")
run make 将输出重定向到文件中。之后使用 . 加载错误文件:cf make.out
。不过,我自己从未尝试过。
最后,make
也可以通过在文件系统中测试结果是否存在来简单地检查结果:
:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif
(这里的 '|' 符号是 vim 的命令分隔符。)将其分配给键盘快捷键将无需键入。
PS我通常尝试让我的程序不产生警告,所以我从来没有真正遇到过这个问题。顺便说一句,导致另一种可能的解决方案是:grep -v tabooword
通过覆盖'makeprg'
. 帮助中实际描述的内容::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
创建一个 tee 包装脚本:
#!/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
)。
它没有经过测试,但这个想法应该很清楚。希望能帮助到你。