【发布时间】:2014-05-16 12:34:41
【问题描述】:
如何在 vi 中删除所有 C 和 C++ cmets?
//
/*
*/
【问题讨论】:
-
我建议this。 (我写它是为了在 vim 中使用。)
如何在 vi 中删除所有 C 和 C++ cmets?
//
/*
*/
【问题讨论】:
您可以使用像Flex 这样的词法分析器直接应用于源代码。在其手册中,您可以找到“How can I match C-style comments?”。
如果需要深入教程,可以找here;在“词法分析”部分下,您可以找到向您介绍该工具的 pdf 文件和包含一些实际示例的存档,包括“c99-comment-eater”。
【讨论】:
使用正则表达式,由于 C/C++ 语法的复杂性,您最多只能获得 90% 正确的解决方案。最好让正确的工具(编译器)来完成这项工作。
幸运的是,Vim 可以很好地与外部工具集成。基于this answer,你可以这样做:
:%! gcc -fpreprocessed -dD -E "%" 2>/dev/null
注意事项:
gcc
【讨论】:
你不能。解析 C 和 C++ cmets 不是正则表达式可以做的事情。它可能适用于简单的情况,但您永远不知道结果是否会给您留下损坏的源文件。例如。这是怎么回事:
printf ("//\n");
正确的方法是使用能够解析 C 的外部工具。例如,某些编译器可能具有剥离 cmets 的选项。
编写注释剥离器也是 lex 和 yacc 编程的基本练习。
另请参阅此问题:Remove comments from C/C++ code
【讨论】:
Esc:%s/\/\///
Esc:%s/\/\*//
Esc:%s/\*\///
【讨论】:
#,@...作为:s的分隔符,如果模式包含/ ...并且你的命令不是这个问题的答案。跨度>
printf ("//\n");有什么影响?