VIM如何用偏移代替

0 vim substitution offset

vim中的搜索命令允许您将光标放在相对于搜索结果的位置.例如,/hello/b+2将光标放在第一个上l.

如何使用substitute命令执行此操作?

s/hello/b+2/_/    
Run Code Online (Sandbox Code Playgroud)

不起作用.

我需要这个替换不是整个搜索字符串,而是替换它的一部分(具体来说,除了一个单词的第一个字符之外的所有字符).

ZyX*_*ZyX 8

您通常有两个选项:类似于其他正则表达式引擎零宽度匹配(尽管语法不同):

:s/\(he\)\@<=llo/_/
Run Code Online (Sandbox Code Playgroud)

或者vim特定的"在这里设置匹配的开始":

:s/he\zsllo/_/
Run Code Online (Sandbox Code Playgroud)

.此外,有一种解决方法在几乎所有其他正则表达式引擎中看起来都类似:

:s/\(he\)llo/\1_/
Run Code Online (Sandbox Code Playgroud)

:这会捕获应该保持不变的文本并使替换包含它.