如何在vim编辑器中忽略搜索和替换中的几个字符

如何在vim编辑器中忽略搜索和替换中的几个字符,vim,replace,Vim,Replace,我想在vim编辑器中执行以下操作: :%s/SETR p:LL../SETR p:LH../g 在我的文件中有多行以SETR p:开头,我想用H替换第二行L,而该行中的其余两个字母将与以前相同 说它是否是更早的SETR p:LLHC 更换后将是SETR P:lhc 我可以用vim编辑器在一条指令中完成吗?这通常是通过捕获组完成的。通过\(…\)捕获要重新包含在替换中的源模式部分。然后,在替换中,您可以通过\1引用该零件(并通过\2,依此类推): 这在:help/\(下进行了说明 另一种方法是在

我想在vim编辑器中执行以下操作:

:%s/SETR p:LL../SETR p:LH../g

在我的文件中有多行以
SETR p:
开头,我想用
H
替换第二行
L
,而该行中的其余两个字母将与以前相同

说它是否是更早的
SETR p:LLHC

更换后将是
SETR P:lhc


我可以用vim编辑器在一条指令中完成吗?

这通常是通过捕获组完成的。通过
\(…\)
捕获要重新包含在替换中的源模式部分。然后,在替换中,您可以通过
\1
引用该零件(并通过
\2
,依此类推):

这在
:help/\(
下进行了说明


另一种方法是在
LL
之后使用
\ze
(匹配结束)结束匹配。模式的其余部分(
)仍处于选中状态,但它不是匹配的一部分

:%s/SETR P:LL\ze../SETR P:LH/g


顺便说一句,您的模式也可以很好地匹配较长的端点,例如,
SETR p:LLHHHHHHHH
。如果需要将扩展名限制为两个字母,请使用
。\>
(关键字边界)或
。\A\@=
(非字母先行).

这通常通过捕获组完成。通过
\(…\)
捕获要重新包含在替换中的源模式部分。然后,在替换中,您可以通过
\1
引用该部分(然后通过
\2
,依此类推):

这在
:help/\(
下进行了说明


另一种方法是在
LL
之后使用
\ze
(匹配结束)结束匹配。模式的其余部分(
)仍处于选中状态,但它不是匹配的一部分

:%s/SETR P:LL\ze../SETR P:LH/g


顺便说一句,您的模式也可以很好地匹配较长的端点,例如,
SETR p:LLHHHHHHHH
。如果需要将扩展名限制为两个字母,请使用
。\>
(关键字边界)或
。\A\@=
(非字母先行)。

看起来您可以满足于:

:%s/SETR P:LL/SETR P:LH/
要从匹配中排除前面的文本,您可以使用look-behind断言或:


:%s/\(SETR P:L\)\@

看起来您可以满足于:

:%s/SETR P:LL/SETR P:LH/
要从匹配中排除前面的文本,您可以使用look-behind断言或:


:%s/\(SETR P:L\)\@我已经在我的文件中尝试过了,而且效果很好。感谢您富有成效的回复:)啊,很高兴我能提供帮助!请单击概述的复选标记来接受答案。这样,问题被标记为已关闭,您就增加了获得未来问题答案的机会,因为这表明您关心答案。我已经在我的文件中试过了,并且效果良好。感谢您富有成效的回答:)啊,很高兴我能提供帮助!请点击勾选框接受答案。通过这种方式,问题被标记为已结束,并且您增加了获得未来问题答案的机会,因为这表明您关心这些答案。谢谢您如此有用的回答谢谢您如此有用的回答