在Vim中着色make的输出:make,grep等

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

我有与grep相同的问题:运行时:grep,输出没有着色;当运行:!grep,它是.我已经尝试使用–color选项与:grep,无效. :set grepprg返回grepprg = grep -n $* / dev / null.

我读过VIM Unix commands printed in colorVIM: how to color my vim grep result patterns?.前者似乎有相反的问题(即:!命令输出不着色);后者没有任何替代方法来降下壳,我觉得这不是对这个问题的“正确”解决.

问题是,当Vim通过以下命令运行其他命令:make或者:grep时,这些命令没有得到标准输出的终端 – 因为它们为 isatty(STDOUT_FILENO)为假 – 因为Vim正在捕获输出在终端上显示的方式.另一方面,当您使用:!make或:!grep,标准输出只是到终端.

认情况下是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颜色的文件名或亚麻布.)

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...