首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除大文件中的注释

删除大文件中的注释
EN

Stack Overflow用户
提问于 2017-08-23 22:57:13
回答 5查看 296关注 0票数 2

我试图删除一堆评论,这些评论的格式如下:

代码语言:javascript
复制
/**
 * @ngdoc

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

*/

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

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

下面是单独的模式:\/**\n * @ngdoc*\/

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

代码语言:javascript
复制
E871: (NFA regexp) Can't have a multi follow a multi !
E61: Nested *
E476: Invalid command

谢谢你帮忙做这场雷杰普噩梦!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-24 05:02:37

与其尝试将其插入一个复杂的regex中,更容易的是搜索注释的开头并从注释中删除到注释的末尾

代码语言:javascript
复制
:g/^\/\*\*$/,/\*\/$/d_

这会分解成

代码语言:javascript
复制
: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)
票数 2
EN

Stack Overflow用户

发布于 2017-08-23 23:03:16

您的问题是,您有\{-}*,这是错误消息中引用的multis。引用*

代码语言:javascript
复制
%s/\/\*\*\n \* @ngdoc\_.\{-}\*\/\n//g
票数 1
EN

Stack Overflow用户

发布于 2017-08-23 23:30:12

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

代码语言:javascript
复制
sed '\@^/\*\*$@,\@^\*/$@d' file

这将删除从与锚定在第1列的/**匹配的行开始到与第1列锚定的*/匹配的行。如果您的注释行为良好(例如,在/**之后没有尾随空间),这应该可以做您想做的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45850515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档