简而言之,我需要在Makefile中知道是否从ViM调用了make。是否存在某个变量(例如环境或其他),ViM将设置为特定值?。
我需要这个的原因如下:
如果从bash调用,我可以为用户(或我自己)做各种奇妙的事情,比如给出关于正在构建哪个子系统的消息并突出显示错误和警告。
但问题是,从ViM调用时,错误消息已被捕获,并且引入\x1b
命令(用于颜色)使得消息对ViM来说难以理解。我想要做的是在ViM中发出:make
时基本上禁用着色。
即使我宁愿让Makefile解决它,我仍然愿意接受其他解决方案。
答案 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)
您可以检查MYVIMRC
或VIMRUNTIME
个环境变量。在我的GNU / Linux发行版中,当SHLVL
内调用make时,vim
值为1,而bash为2。