首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vim全局命令匹配多行并合并它们

vim全局命令匹配多行并合并它们
EN

Stack Overflow用户
提问于 2020-08-09 23:52:31
回答 1查看 93关注 0票数 1

我有一个文件,看起来像这样:

代码语言:javascript
复制
acc abcd etc. etc.
// line 1
// line 2
acc more words
// 3-4 more lines
acc some other words

有些行是以acc开头的,有些行不是以acc开头的。我想把那些不是以@@开头的行和那些以它开头的行合并起来,这样我的文件在操作后就只有acc开头的行了:

代码语言:javascript
复制
acc abcd etc. etc.@@//line 1@@//line 2
acc more words@@//3-4 more lines
acc some other words

我尝试了下面的命令,使用global分隔每一组行,并用@@替换\n

代码语言:javascript
复制
:%g/^acc.*\_.\{-}\(^acc\)\@=/s/\n/@@/g

但在:g的每个模式匹配中,我只能将第一个\n替换为@@

我在这个命令中做错了什么?有没有更简单的方法来做这件事?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 04:25:28

我宁愿在几个简单直观的步骤中完成它,而不是在一个复杂而难以推理的步骤中完成它。对于这类问题,这似乎是一种更有效的方法。

例如:

代码语言:javascript
复制
:v/^acc/s/^/@@
:%s/\n^@@/@@/

解释:

  • 将每个不以acc开头的行前缀以@@
  • 将每个换行符后面的@@替换为@@,从而有效地将所有@@行连接在一起,并使用acc行。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63328399

复制
相关文章

相似问题

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