我的问题是关于一个非常具体的搜索和替换模式,但我希望为更一般的情况找到答案。我目前正在处理一些带有分配覆盖的LaTeX幻灯片,我需要将某些整数增加一个或多个。样本文本:
\only<1,5-7,9>{hello 11}简而言之, only 命令只在幻灯片1、5到7和9上显示hello 11。在第2位置插入幻灯片之后,我需要幻灯片2上面的所有幻灯片来增加。这就是我想出来的:
:.,$s/\d\+/\=str2float(submatch(0))>2?submatch(0)+1:submatch(0)/g从当前的行到文件的末尾,它将所有整数加到2乘1以上。这意味着11也是递增的,这不是我想要的:
\only<1,6-8,10>{hello 12}Q1:如何才能在分隔符'<‘’>和'>‘之间匹配和增加整数?
最终,我希望能够通过指定一个模式并将另一个模式应用到结果中来逐步细化搜索模式。例如,我首先在给定示例文本的分隔符之间匹配文本。
/<[^<>]*>这将突出我引述的案文:
\only"<1,5-7,9>"{hello 11}现在应用我最初的解决方案来增加分隔符之间的数字。我可以将 grep 命令链接到一个带有管道符号的shell中,用每个新的grep命令来细化结果。
Q2:,这种vim搜索模式的链接有可能吗?
更新:--弗洛里斯的解决方案非常接近。它确实解决了原来的问题,但我没有提到所有的要求。它们是:
- The delimiters are guaranteed to be on one line, e.g., <1,5-7,9>.
- Multiple delimited parts can be on one line, e.g.:
hello 11\only<1,6-7,9>{hello 11}\only<1,6-7,9>{hello 11}第二个要求失败,因为解决方案当前返回:
hello 12\only<1,7-8,10>{hello 12}\only<1,7-8,10>{hello 11}它只会在上次出现'>‘之后忽略整数.我希望结果是:
hello 11\only<1,7-8,10>{hello 11}\only<1,7-8,10>{hello 11}谢谢你的帮助!
发布于 2014-02-05 21:46:26
如果您可以假设\only<....将出现在它自己的一行中,那么您可以简单地
:.,$g/\\only<\d/s/\d\+/\=str2float(submatch(0))>2?submatch(0)+1:submatch(0)/g即,用于过滤目标行的:global命令(:.,$g/\\only<\d/),然后是未更改的“魔术”替换:)
https://stackoverflow.com/questions/21588649
复制相似问题