Vim多行搜索模式

wz8daaqr  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(306)

我有一个替代命令,它可以捕获并显示替换字符串中的submatch()值。但是我想解析该行下面的另一行信息。该行总是空行之后的第一行,尽管空行的行数不同。例如:

The first important line I want to capture is here
Stuff I don't want.
A few more lines of stuff I don't want...

Second line I want to capture.

这种模式在文档中重复了大约100次。我可以用“The First Important Line”来替换,但是这种搜索模式不应该包括一种方法,可以跳到第一个空行,然后选择下一个“Second line I want to capture”。然后我可以将第二行的内容放在子匹配括号中,并在需要的地方替换它们(对吗?)。
如果是这样的话,我无法找到扩展第一搜索模式以捕获“第二行”的方法。如有建议或纠正我的方法,将不胜感激。

4nkexdtk

4nkexdtk1#

有人已经处理过类似的问题。下面我提供他们的解决方案和详细描述。
/^\nF\d\_.\{-}\_^\n\zs.*/+
它的意思是“找到一组以F和一个数字开头的行,然后向前扫描到下一个空行,并选择其后的行。”
| 正则表达式的一部分|含义|
| - -|- -|
| ^\n个|匹配行首,后跟换行符-即空行|
| F\d|下一行以F开头,后跟一个数字|
| \_.\{-}| \_.类似于.,但也匹配换行符。\{-}匹配前面的\_.的最小数字。(如果我使用*而不是\{-},它将匹配到接近文件结尾的位置。)|
| \_^\n个|匹配空行。\_^类似于^,但^仅在正则表达式的开头起作用。|
| \zs个|当匹配完成时,将匹配的开始设置为这个点。我使用这个是因为我不希望前面的文本被突出显示。|
| .*|匹配整行。|
正则表达式后面的+告诉Vim将光标放在选择后的行上。

pes8fvy9

pes8fvy92#

我想我读过关于偏移量的内容,但是我现在在帮助中找不到相关的内容。因此,我的另一个解决方案是录制一个宏来完成您想要的任务:

qa/[Your pattern]<CR>jddq

然后,您可以使用@a执行此宏,并使用@@重复此操作;或者运行它很多次(例如,999@a)。

相关问题