我有一个替代命令,它可以捕获并显示替换字符串中的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”。然后我可以将第二行的内容放在子匹配括号中,并在需要的地方替换它们(对吗?)。
如果是这样的话,我无法找到扩展第一搜索模式以捕获“第二行”的方法。如有建议或纠正我的方法,将不胜感激。
2条答案
按热度按时间4nkexdtk1#
有人已经处理过类似的问题。下面我提供他们的解决方案和详细描述。
/^\nF\d\_.\{-}\_^\n\zs.*/+
它的意思是“找到一组以F和一个数字开头的行,然后向前扫描到下一个空行,并选择其后的行。”
| 正则表达式的一部分|含义|
| - -|- -|
|
^\n
个|匹配行首,后跟换行符-即空行||
F\d
|下一行以F开头,后跟一个数字||
\_.\{-}
|\_.
类似于.
,但也匹配换行符。\{-}
匹配前面的\_.
的最小数字。(如果我使用*
而不是\{-}
,它将匹配到接近文件结尾的位置。)||
\_^\n
个|匹配空行。\_^
类似于^
,但^
仅在正则表达式的开头起作用。||
\zs
个|当匹配完成时,将匹配的开始设置为这个点。我使用这个是因为我不希望前面的文本被突出显示。||
.*
|匹配整行。|正则表达式后面的
+
告诉Vim将光标放在选择后的行上。pes8fvy92#
我想我读过关于偏移量的内容,但是我现在在帮助中找不到相关的内容。因此,我的另一个解决方案是录制一个宏来完成您想要的任务:
然后,您可以使用
@a
执行此宏,并使用@@
重复此操作;或者运行它很多次(例如,999@a
)。