首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vim中分隔符之间的增量数

vim中分隔符之间的增量数
EN

Stack Overflow用户
提问于 2014-02-05 21:14:26
回答 4查看 492关注 0票数 2

我的问题是关于一个非常具体的搜索和替换模式,但我希望为更一般的情况找到答案。我目前正在处理一些带有分配覆盖的LaTeX幻灯片,我需要将某些整数增加一个或多个。样本文本:

代码语言:javascript
运行
复制
\only<1,5-7,9>{hello 11}

简而言之, only 命令只在幻灯片1、5到7和9上显示hello 11。在第2位置插入幻灯片之后,我需要幻灯片2上面的所有幻灯片来增加。这就是我想出来的:

代码语言:javascript
运行
复制
:.,$s/\d\+/\=str2float(submatch(0))>2?submatch(0)+1:submatch(0)/g

从当前的行到文件的末尾,它将所有整数加到2乘1以上。这意味着11也是递增的,这不是我想要的:

代码语言:javascript
运行
复制
\only<1,6-8,10>{hello 12}

Q1:如何才能在分隔符'<‘’>和'>‘之间匹配和增加整数?

最终,我希望能够通过指定一个模式并将另一个模式应用到结果中来逐步细化搜索模式。例如,我首先在给定示例文本的分隔符之间匹配文本。

代码语言:javascript
运行
复制
/<[^<>]*>

这将突出我引述的案文:

代码语言:javascript
运行
复制
\only"<1,5-7,9>"{hello 11}

现在应用我最初的解决方案来增加分隔符之间的数字。我可以将 grep 命令链接到一个带有管道符号的shell中,用每个新的grep命令来细化结果。

Q2:,这种vim搜索模式的链接有可能吗?

更新:--弗洛里斯的解决方案非常接近。它确实解决了原来的问题,但我没有提到所有的要求。它们是:

代码语言:javascript
运行
复制
- 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}

第二个要求失败,因为解决方案当前返回:

代码语言:javascript
运行
复制
hello 12\only<1,7-8,10>{hello 12}\only<1,7-8,10>{hello 11}

它只会在上次出现'>‘之后忽略整数.我希望结果是:

代码语言:javascript
运行
复制
hello 11\only<1,7-8,10>{hello 11}\only<1,7-8,10>{hello 11}

谢谢你的帮助!

EN

Stack Overflow用户

发布于 2014-02-05 21:46:26

如果您可以假设\only<....将出现在它自己的一行中,那么您可以简单地

代码语言:javascript
运行
复制
:.,$g/\\only<\d/s/\d\+/\=str2float(submatch(0))>2?submatch(0)+1:submatch(0)/g

即,用于过滤目标行的:global命令(:.,$g/\\only<\d/),然后是未更改的“魔术”替换:)

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

https://stackoverflow.com/questions/21588649

复制
相关文章

相似问题

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