在Vim中使用:make命令构建应用程序时,输出未着色。我已经将makefile配置为使用clang作为C编译器,并且在Vim之外运行make或运行:!make时,clang的输出是彩色的。 :set makeprg返回makeprg=make,仅供引用。

我对grep有相同的问题:运行:grep时,输出未着色;当运行:!grep时,它是。我尝试将--color选项与:grep结合使用,但无济于事。 :set grepprg返回grepprg=grep -n $* /dev/null

我已经阅读了VIM Unix commands printed in colorHow to color my vimgrep result patterns。前者似乎有相反的问题(即:!command输出未着色);后者除了下拉到 shell 没有任何选择,我认为这不是对该问题的“正确”修复。

最佳答案

问题是,当Vim通过:make:grep运行其他命令时,这些命令没有获得标准输出的终端-就他们而言isatty(STDOUT_FILENO)为false的意义是-因为Vim正在捕获其上的输出在终端上显示的方式。另一方面,当您使用:!make:!grep时,标准输出,仅用于终端。

默认情况下,Clang和grep --color=auto(可能是您使用别名的方式)使用stdout的终端性来决定是否为其输出着色。这样做很方便,因为您可以在终端上获得彩色输出,但是在将输出重定向到文件时仅捕获文本,而无需添加额外的命令行选项。

因此,您想要做的就是覆盖这些命令的常用技巧,以便它们始终为输出着色。

对于grep,当它通过Vim中的--color=always运行时,可以使用:grep:

:set grepprg=grep\ --color=always\ -n\ $*\ /dev/null

并根据您的颜色设置和grep的版本,效果会很好。

对于clang,您可以将Makefile更改为使用clang -fcolor-diagnostics,以便更改为force colourisation,或者更灵活地向$(CC)添加一个额外的变量,当通过Vim中的:make运行时,该变量将被覆盖:
:set makeprg=make\ EXTRA_CFLAGS=-fcolor-diagnostic

但是(至少使用clang 3.0和vim 7.3),您会发现clang的颜色样式阻止Vim从诊断程序中选择文件名和行号,因此这样做破坏了使用:make而不是:!make的优势。

您可以通过在Vim的errorformat选项中添加更多条目以匹配彩色的clang风格的诊断程序,使Vim从周围的ANSI转义序列中选择要进行着色的文件名等。 (如果grepformat的颜色是文件名或行号的颜色,则类似grep。)

关于vim - 在Vim中为:make,:grep等的输出着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12764999/

10-12 12:44
查看更多