【问题标题】:In vim, how to remove all the C and C++ comments?在 vim 中,如何删除所有 C 和 C++ 注释?
【发布时间】:2014-05-16 12:34:41
【问题描述】:

如何在 vi 中删除所有 C 和 C++ cmets?

//

/*       
 */

【问题讨论】:

  • 我建议this。 (我写它是为了在 vim 中使用。)

标签: c vim comments


【解决方案1】:

您可以使用像Flex 这样的词法分析器直接应用于源代码。在其手册中,您可以找到“How can I match C-style comments?”。

如果需要深入教程,可以找here;在“词法分析”部分下,您可以找到向您介绍该工具的 pdf 文件和包含一些实际示例的存档,包括“c99-comment-eater”。

【讨论】:

    【解决方案2】:

    使用正则表达式,由于 C/C++ 语法的复杂性,您最多只能获得 90% 正确的解决方案。最好让正确的工具(编译器)来完成这项工作。

    幸运的是,Vim 可以很好地与外部工具集成。基于this answer,你可以这样做:

    :%! gcc -fpreprocessed -dD -E "%" 2>/dev/null
    

    注意事项:

    • 需要gcc
    • 它还略微修改了格式(缩进缩进等)

    【讨论】:

      【解决方案3】:

      你不能。解析 C 和 C++ cmets 不是正则表达式可以做的事情。它可能适用于简单的情况,但您永远不知道结果是否会给您留下损坏的源文件。例如。这是怎么回事:

       printf ("//\n");
      

      正确的方法是使用能够解析 C 的外部工具。例如,某些编译器可能具有剥离 cmets 的选项。

      编写注释剥离器也是 lex 和 yacc 编程的基本练习。

      另请参阅此问题:Remove comments from C/C++ code

      【讨论】:

        【解决方案4】:
        Esc:%s/\/\///
        
        Esc:%s/\/\*//
        
        Esc:%s/\*\///
        

        【讨论】:

        • 除了你的命令会做什么,你可以使用#,@...作为:s的分隔符,如果模式包含/ ...并且你的命令不是这个问题的答案。跨度>
        • 这对printf ("//\n");有什么影响?
        • Jens...是的...我同意它也会删除 printf 语句中的 //
        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2014-11-30
        • 2016-12-03
        • 2012-02-05
        • 2013-04-12
        • 2012-06-18
        • 2016-02-29
        • 2011-12-25
        相关资源
        最近更新 更多