如果从ViM调用`make`,如何在Makefile中知道?

时间:2012-09-04 09:59:15

标签: vim makefile

简而言之,我需要在Makefile中知道是否从ViM调用了make。是否存在某个变量(例如环境或其他),ViM将设置为特定值?。

我需要这个的原因如下:

如果从bash调用,我可以为用户(或我自己)做各种奇妙的事情,比如给出关于正在构建哪个子系统的消息并突出显示错误和警告。

但问题是,从ViM调用时,错误消息已被捕获,并且引入\x1b命令(用于颜色)使得消息对ViM来说难以理解。我想要做的是在ViM中发出:make时基本上禁用着色。

即使我宁愿让Makefile解决它,我仍然愿意接受其他解决方案。

4 个答案:

答案 0 :(得分:4)

我要么明确告诉makefile你不想着色,要么将其过滤掉。 如果你试图在makefile中猜测,当你使用不同的编辑器,shell或调整你的环境时,它可能会中断。

我的偏好是只过滤掉不可打印的字符:

:set makeprg=make\ $*\ \\\|filter

因为这不需要makefile中的显式变通方法。但是,所需的过滤器本身并不重要:例如,请参阅unix.stackexchange上的this question

或者,正如已经建议的那样,明确告诉makefile的最简单方法是在调用中添加一个变量:

:set makeprg=make\ NO_COLOUR=1

或其他任何内容(make应为makeprg的当前值。)

答案 1 :(得分:2)

在Vim内部,您可以设置由打开的shell继承的环境变量; e.g。

:let $INSIDE_VIM = 1

如果这只是:make,您可以操纵决定调用内容的'makeprg'

:set makeprg=export\ INSIDE_VIM=1;make

如果你只关心着色的转义序列,你可以将$TERM设置为不理解颜色的东西(dumb可能?)并且如果着色不是很难-coded(不幸的是,它在许多工具中很大),它应该服从终端设置而不打印转义序列。

答案 2 :(得分:1)

您可以将vim绑定更改为SOURCE="vim" make,因此在您的makefile中$$SOURCE变量设置为“vim”。

编辑:我发现你实际上没有在vim中使用绑定,你可以在.vimrc(或/etc/vimrc)中使用以下行,如下所示:

:nmap <F5> <CR>SOURCE="vim" :make<CR>

这会将F5绑定到您想要的

答案 3 :(得分:1)

您可以检查MYVIMRCVIMRUNTIME个环境变量。在我的GNU / Linux发行版中,当SHLVL内调用make时,vim值为1,而bash为2。