8

简而言之,我需要在 Makefile 中知道是否正在从 ViM 调用 `make。是否有某个变量(例如 ENVIRONMENT 或其他东西),ViM 会将其设置为特定值?

我需要这个的原因如下:

如果从 bash 调用,我可以为用户(或我自己)做各种美妙的事情,例如提供有关正在构建的子系统的消息以及突出显示错误和警告。

然而,问题是,当从 ViM 调用时,错误消息已经被捕获,并且引入\x1b命令(用于颜色)使 ViM 无法理解这些消息。我想要做的基本上:make是在 ViM 中发出时禁用着色。

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

4

4 回答 4

4

我要么明确地告诉makefile你不想着色,要么把它过滤掉。如果您尝试在 makefile 内部进行猜测,那么当您使用不同的编辑器、shell 或调整您的环境时,它很可能会中断。

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

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

因为这不需要 makefile 中的明确解决方法。但是,所需的过滤器本身并不重要:例如参见unix.stackexchange 上的这个问题

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

:set makeprg=make\ NO_COLOUR=1

或其他(make应该是 的当前值makeprg)。

.

于 2012-09-04T10:43:57.073 回答
2

在 Vim 中,你可以设置被打开的 shell 继承的环境变量;例如

:let $INSIDE_VIM = 1

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

:set makeprg=export\ INSIDE_VIM=1;make

如果你只是关心着色的转义序列,你可以设置$TERM一些不理解颜色的东西(dumb也许?)并且如果着色不是硬编码的(不幸的是,如果在许多工具中这是一个很大的问题) ,它应该服从终端设置并且不打印转义序列。

于 2012-09-04T10:34:42.440 回答
1

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

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

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

这会将 F5 绑定到您想要的

于 2012-09-04T10:06:17.213 回答
1

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

于 2012-09-04T10:06:53.923 回答