vim中的搜索命令允许您将光标放在相对于搜索结果的位置。例如,/hello/b+2
将光标放在第一个l
上。
如何使用substitute命令执行此操作?
s/hello/b+2/_/
不起作用。
我需要这个替换不是整个搜索字符串,而是替换它的一部分(具体来说,除了一个单词的第一个字符之外的所有字符串)。
答案 0 :(得分:8)
您通常有两个选项:类似于其他正则表达式引擎零宽度匹配(但语法不同):
:s/\(he\)\@<=llo/_/
或vim-specific“在此处设置匹配的开头”:
:s/he\zsllo/_/
。此外,有一种解决方法在几乎所有其他正则表达式引擎中看起来都类似:
:s/\(he\)llo/\1_/
:这会捕获应该保持不变的文本,并使替换包括它。