gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:28:41 24 4
gpt4 key购买 nike

使用 :make 构建我的应用程序时Vim 中的命令,输出未着色。我已将 makefile 配置为使用 clang 作为 C 编译器,并且在运行时 make在 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还有 How to color my vimgrep result patterns .前者似乎有相反的问题(即 :!command 输出未着色);后者除了下降到 shell 之外别无选择,我认为这不是该问题的“正确”解决方案。

最佳答案

问题是当 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) 添加一个额外的变量通过 :make 运行时将被覆盖在 Vim 中:
:set makeprg=make\ EXTRA_CFLAGS=-fcolor-diagnostic

然而(至少在 clang 3.0 和 vim 7.3 中)你会发现 clang 的着色风格阻止 Vim 从诊断中挑选出文件名和行号,所以这样做会破坏使用 :make 的优势。而不是 :!make .

你可以教 Vim 从周围的 ANSI 转义序列中挑选出文件名等,通过向 Vim 的 errorformat 添加更多条目来进行着色。选项以匹配彩色叮当式诊断。 (与 grepformat 类似,如果您的 grep 着色为文件名或行号着色。)

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com