我有这样的模式:
word0word
word0word
word0word
我需要像这样对模式的出现次数进行编号:
word1word
word2word
word3word
我发现我可以这样做:
:let @a=1 | %s/word0/\='word'.(@a+setreg('a',@a+1))/g
但它忽略了模式的其余部分(第二个“单词”,我需要包含它来识别模式)。 有没有办法包括其余的模式?我试过了:
:let @a=1 | %s/word0word/\='word'.(@a+setreg('a',@a+1))'word'/g
但是这会返回错误。
我还想过将它与\zs
和\ze
结合起来,但我不确定如何处理它。
答案 0 :(得分:1)
在你的第二种模式中,你只是错过了.
(表示连接)
这将有效:
:let @a=1 | %s/word0word/\='word'.(@a+setreg('a',@a+1)).'word'/g
" this one --^
请注意,如果您想在子地点表达式中使用捕获组,则需要使用submatch(x)
而不是\x
(将x
替换为匹配编号,从1
):
:let @a=1 | %s/\vword0(\w+)/\='word'.(@a+setreg('a',@a+1)).submatch(1)/g
有关使用子替换表达式的更多信息,请参阅:h sub-replace-\=
。