我可以找到表达式,但我不想替换它的所有内容(vim 中的正则表达式)

I can find the expressions but I don't want to replace everything of it (regex in vim)

我试了一段时间了,但还是搞不懂:我有这样的文字:

xxx "fy1":
    xxx.xxx = fy;
    xxx;
xxx "tm1":
    xxx.xxx = tm;
    xxx;
...

我希望它看起来像这样:

xxx "fy1":
    xxx.xxx = fy1;
    xxx;
...

我的问题是我可以找到所有出现的地方,我想在其中放置一个“1”

s/[ft][ymdhi];/???/g

但我放在问号处的所有内容也替换了字母。我唯一想做的就是在这两个字母后面加上一个数字。

我想了一些事情

\w{2}

也在搜索字符串中,但这会找到分号前有两个字母的所有内容,所以我想我需要

[ft][ymdhi]

提前致谢!

您想将 \(...\)</code> 一起使用:</p> <pre><code>:%s/\([ft][ymdhi]\);/;/

转义的括号 \(...\) 排序 store 括号之间匹配的内容。存储的文本稍后可以在 </code>.</p> 中再次使用 <p>在您的情况下,<code> 与十一无关,这只是一个巧合,您记得带括号的文本后跟一个 1

您可以创建捕获组,以便在替换中引用匹配的文本。或者你可以使用 vim 的 \zs 来保持一些匹配的文本不变,例如 这条线完成了工作:

%s/[ft][ymdhi]\zs;/1;/g

:h \zs and :h \ze 详情

如果在此示例中也添加 \ze,则为:

%s/[ft][ymdhi]\zs\ze;/1/g

它也有效。