删除大文件中的注释

时间:2017-08-23 22:57:14

标签: regex vim

我正在尝试删除一系列以下格式的评论:

/**
 * @ngdoc

 ... comment body (delete me, too!)

*/

我尝试过使用此命令:%s/\/**\n * @ngdoc.\{-}*\///g

以下是没有模式的正则表达式:%s/pattern1.\{-}pattern2//g

以下是各个模式:\/**\n * @ngdoc*\/

当我在vim中尝试我的模式时,我收到以下错误:

E871: (NFA regexp) Can't have a multi follow a multi !
E61: Nested *
E476: Invalid command

感谢您对此regexp噩梦的任何帮助!

5 个答案:

答案 0 :(得分:2)

不是试图将其填充到一个复杂的正则表达式中,而是更容易搜索评论的开头并从那里删除到评论的结尾

:g/^\/\*\*$/,/\*\/$/d_

这分解为

:g               start a global command
/^\/\*\*$/       search for start of a comment: <sol>/**<eol>
,/^\*\/$/        extend the range to the end of a comment: <sol>*/<eol>
d                delete the range
_                use the black hole register (performance optimization)

答案 1 :(得分:1)

您的问题是\{-}后跟*,这是错误消息中引用的多重符号。引用*

%s/\/\*\*\n \* @ngdoc\_.\{-}\*\/\n//g

答案 2 :(得分:0)

在模式中使用嵌入式换行是错误的方法。您应该使用地址范围。类似的东西:

sed '\@^/\*\*$@,\@^\*/$@d' file

这将删除从第1列锚定的/**匹配的第一行到第1列锚定的匹配*/的行。如果您的注释表现良好(例如,{之后没有尾随空格) {1}}),这应该做你想要的。

答案 3 :(得分:0)

使用gc尝试删除

时要小心
%s/\v\/\*\*\n\s\*\s\@ngdoc\n((\s*\n)?(\s\*.*\n)?){-}\s?\*\///gc

匹配

等评论
/**
 * @ngdoc

 *  ... comment body (delete me, too!)

 *
 */

答案 4 :(得分:0)

我接近的是使用宏:

qa/\/\*\*<enter><shift-v>/\*\/<enter>d

qa ........ starts recording macro "a"
/\/\*\* ... searches for the comment beginning
<Enter> ... use Ctrl-v Enter
V ......... starts visual block (until...)
/\*\/ ..... end of your comment
<Enter> ... Ctrl-v Enter agai
d ......... it will delete selected area

为了isert etc presse后跟你想要的关键字。