如何将语法突出显示添加到 make 错误消息中?
How can I add syntax highlighting to a make error message?
总结
我想在错误消息中手动添加特定单词的语法突出显示。我尝试使用到 awk
的管道,但这似乎不适用于 make
抛出的整个消息。任何人都可以帮助我让以下管道为 make
的整个错误消息工作吗?
make | awk '{for(i=1;i<=NF;i++){ if($i~/error/ || $i~/Built/) $i=sprintf("3[0;36m %s 3[0;00m",$i)}; print}'
或者也许——更好的是——对我的
采取不同的方法
情况(详细)
为了构建我的 Latex 项目,我将 Cmake 与 UseLATEX (github page) 结合使用。这样,我可以通过从构建文件夹中执行 make
来简单地呈现我的文档。唯一的问题:错误消息的文本墙没有语法高亮显示。我需要添加这个的最小版本,以高效地工作。 (也许可以在我的终端中全局突出显示单词?)
通过将管道中的输出传递给 awk
(manpage)—inspired by this askubuntu post——我能够突出显示 make
的成功消息,pdflatex myfile.tex
的成功 和error信息,但是不是make
的错误信息,它没有突出长信息中有趣的部分。
通过在上面的代码片段中突出显示 Built
,可以看到它确实在第一个命令 make
成功时突出显示。
问题是我不完全明白管道什么时候经过什么。似乎有些输出可以高亮显示有些不能。
感谢您的帮助!
重现所需的步骤
要准确地了解手头的情况,您需要一个包含
的项目文件夹
build/
cmake/
myfile.tex
CMakeLists.txt
与 cmake/
包含 UseLATEX.cmake
和 CMakeLists.txt
阅读
include(cmake/UseLATEX.cmake)
ADD_LATEX_DOCUMENT(myfile.tex)
和 myfile.tex
是有效或无效的乳胶文档,例如
\documentclass{article}
\begin{document}
Some \undefined command
\end{document}
从 build/
文件夹中,调用 cmake ..
,然后调用 make
,或者更确切地说是上面的完整命令。
消息写在 stderr 上,而不是 stdout 上。你必须处理标准错误。在bash中,您可以:
make 2> >(do_something_with_stderr >&2) | do_something_with_stdout
因为 |
改变了缓冲,在交互式程序中并不总是需要它。对于互动,我更喜欢:
make 2> >(do_something_with_stderr >&2) >(do_something_with_stdout)
有时这是一个功能:
some_func() { do_something; }
make 2> >(some_func >&2) >(some_func)
总结
我想在错误消息中手动添加特定单词的语法突出显示。我尝试使用到 awk
的管道,但这似乎不适用于 make
抛出的整个消息。任何人都可以帮助我让以下管道为 make
的整个错误消息工作吗?
make | awk '{for(i=1;i<=NF;i++){ if($i~/error/ || $i~/Built/) $i=sprintf("3[0;36m %s 3[0;00m",$i)}; print}'
或者也许——更好的是——对我的
采取不同的方法情况(详细)
为了构建我的 Latex 项目,我将 Cmake 与 UseLATEX (github page) 结合使用。这样,我可以通过从构建文件夹中执行 make
来简单地呈现我的文档。唯一的问题:错误消息的文本墙没有语法高亮显示。我需要添加这个的最小版本,以高效地工作。 (也许可以在我的终端中全局突出显示单词?)
通过将管道中的输出传递给 awk
(manpage)—inspired by this askubuntu post——我能够突出显示 make
的成功消息,pdflatex myfile.tex
的成功 和error信息,但是不是make
的错误信息,它没有突出长信息中有趣的部分。
通过在上面的代码片段中突出显示 Built
,可以看到它确实在第一个命令 make
成功时突出显示。
问题是我不完全明白管道什么时候经过什么。似乎有些输出可以高亮显示有些不能。
感谢您的帮助!
重现所需的步骤
要准确地了解手头的情况,您需要一个包含
的项目文件夹build/
cmake/
myfile.tex
CMakeLists.txt
与 cmake/
包含 UseLATEX.cmake
和 CMakeLists.txt
阅读
include(cmake/UseLATEX.cmake)
ADD_LATEX_DOCUMENT(myfile.tex)
和 myfile.tex
是有效或无效的乳胶文档,例如
\documentclass{article}
\begin{document}
Some \undefined command
\end{document}
从 build/
文件夹中,调用 cmake ..
,然后调用 make
,或者更确切地说是上面的完整命令。
消息写在 stderr 上,而不是 stdout 上。你必须处理标准错误。在bash中,您可以:
make 2> >(do_something_with_stderr >&2) | do_something_with_stdout
因为 |
改变了缓冲,在交互式程序中并不总是需要它。对于互动,我更喜欢:
make 2> >(do_something_with_stderr >&2) >(do_something_with_stdout)
有时这是一个功能:
some_func() { do_something; }
make 2> >(some_func >&2) >(some_func)