我有与grep相同的问题:运行时:grep,输出没有着色;当运行:!grep,它是.我已经尝试使用–color选项与:grep,无效. :set grepprg返回grepprg = grep -n $* / dev / null.
我读过VIM Unix commands printed in color和VIM: how to color my vim grep result patterns?.前者似乎有相反的问题(即:!命令输出不着色);后者没有任何替代方法来降下壳,我觉得这不是对这个问题的“正确”解决.
默认情况下是Clang,而grep –color = auto(这可能是你的别名),请使用stdout的终结点来决定是否使其输出变色.这很方便,您可以在终端上获得丰富多彩的输出,但在将输出重定向到文件时,只捕获文本,而无需添加额外的命令行选项.
所以你想做的是覆盖这些命令的常规智能,以便它们总是使它们的输出变色.
对于grep,您可以使用–color = always,当它通过运行:grep在Vim中:
:set grepprg=grep\ --color=always\ -n\ $*\ /dev/null
并且根据您的颜色设置和版本的grep,这将工作得很好.
对于clang,您可以更改Makefile以使用clang -fcolor-diagnostics,以便在force colourisation或更高版本中灵活地添加一个额外的变量到$(CC),这些变量将在Vim中运行时被重写:
:set makeprg=make\ EXTRA_CFLAGS=-fcolor-diagnostic
然而(至少与cl ang 3.0和vim 7.3),您会发现cl ang的色彩风格防止Vim从诊断中挑选出文件名和行号,所以这样做会破坏使用以下优点:make而不是:!make.
您可以教会Vim从周围的ANSI转义序列中挑选文件名等,通过向Vim的errorformat选项添加更多条目来匹配色彩cl样式诊断,从而实现着色. (和grepformat类似,如果你的grep colourisation颜色的文件名或亚麻布.)