加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:57:13 所属栏目:安全 来源:网络整理
导读:在Vim中使用:make命令构建应用程序时,输出不会着色.我已经将makefile配置为使用clang作为C编译器,并且当运行在Vim之外或在运行时运行:!make,clang的输出被着色. :set makeprg返回makeprg = make,仅供参考. 我有与grep相同的问题:运行时: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 color和VIM: 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颜色的文件名或亚麻布.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读