问题
我有一个看起来像这样的文件:
字=某事aaa something aaa
word2 =东西aaa something aaa
word3 =某事aaa aaa
请注意,“某事”并不一定就是同一个词。 “东西”和“aaa”也不一定用白色空格分隔。
问题
我想用vim中的第一个单词替换所有出现的“aaa”。输出应如下所示:
字=东西字东西字 word2 =某事word2是word2
word3 =某事word3是word3
到目前为止,我主要研究了vim的搜索和替换语法,因为这是我最熟悉的。
感谢您的帮助!
答案 0 :(得分:2)
此:s
命令适用于您的示例:
%s/\<aaa\>/\=substitute(getline('.'),'^[^=]*\zs=.*','','')/g
答案 1 :(得分:2)
对于完全使用正则表达式的解决方案,我建议:
:%s/\v%(^([^=]+).*)@<=aaa/\1/g
这适用于宽度为零的后面(\@<=
)。 \v
at
正则表达式的开始只是通过启用“非常”来简化转义
魔术“模式(见:h \v
)。表达本身:
%(^([^=]+).*)@<=aaa
背后的外观与第一组一起运作。 %()
表单是非表单
捕获组(更快一点,并且不会算作编号中的一个
代换)。内部组捕获任何不等号的东西,和
在此组之后,任何内容都匹配(.*
)。所有这一切都没有计算在内
在正则表达式中,真正匹配的是aaa
,但它只是。{
如果在这些条件之前匹配。当然之前是
他们,但目标是捕捉第一个词。
然后,此aaa
被捕获的组替换多次
一行(g
标志)和所有行(%
范围)。