首页 > 解决方案 > 将java行注释自动转成块注释

问题描述

我有一堆带有多个行注释序列的java文件:

// blah blah blah
// blah blah blah 
// blah blah blah 

我想用额外的开头和结尾行将其转换为块注释:

/**
 * blah blah blah 
 * blah blah blah 
 * blah blah blah 
 */

是否有任何简单的方法可以自动处理所有评论?最好用Vimor Eclipse? 当然我可以编写自己的脚本,但我希望有一个更简单的解决方案。

标签: javaeclipsevimcomments

解决方案


对于Vim,您可以使用或多或少复杂的宏轻松完成此操作(取决于它应该有多强大,是否需要支持带计数的普通模式、可视模式,甚至自动调整现有注释的范围)。

但是有几个评论器插件做得很好,它们是通用的(并且通常是可扩展的),因此它们适用于任何文件类型:

使用第一个插件,您需要应用两个映射:首先3<Leader>cu取消注释(3 行),然后3<Leader>cs使用“性感”多部分注释分隔符。这几乎会给你你想要的;您只需*为 JavaDoc 注释插入另一个:

/*
 * blah blah blah
 * blah blah blah 
 * blah blah blah
 */

自动化

要定位行注释的后续行(这里假设从第一列开始),您可以使用:help :range. 使范围从下一个注释行开始,并让它继续,直到下一行不以行注释开头,或者为空。要开发它,使用:print命令很方便:

:/^\/\/ /;/\%(^$\|^[^\/]\)/-1print

一旦这工作,我们可以触发取消注释映射(通过:normal):

:/^\/\/ /;/\%(^$\|^[^\/]\)/-1normal \cu

这将分别取消注释每一行;对于(块)注释,我们需要将块作为一个整体进行处理,将 a 传递[count]给映射。幸运的是,更改标记现在分隔了整个未注释的块,因此我们可以使用它们:

  • 导航回到起点
  • 计算后续行数
  • 触发性感评论映射
:execute line("'[") | execute 'normal' (line("']") - line("'[") + 1) . '\cs'

如果不是最后一步,则可以通过:global. 相反,您需要重复触发上述步骤,直到到达缓冲区的末尾。递归宏可以为您做到这一点。:bufdo然后,您可以通过或将该宏应用于多个文件:argdo。但是你必须非常确定宏是健壮的,并且不会对某些极端情况造成严重破坏。因此,这是一个取舍,取决于您面临的事件数量。


推荐阅读