使用变量内容进行vim搜索和替换表达式

9

在vimscript中,我定义了一个变量,就像这样:

let b:myvar = 'abc'

现在我该如何将该变量的内容插入到搜索和替换中,例如:
:s/123/&myvar/

你是只要求替换部分中的变量吗?还是要求在搜索或替换部分中都有变量? - hippietrail
2个回答

12

Kent的回答对于替换部分很有效;如果在交互式地键入替代命令时需要进行通用插入,可以通过<C-R><C-R>=插入任何表达式(不仅限于变量,还包括函数等。)(这些必须被敲成Ctrl + RCtrl + R=,而不是文字形式):

:substitute/<C-R><C-R>=b:myvar<CR>/replacement/<CR>

在脚本中,你可以使用:execute命令:

:execute 'substitute/' . b:myvar . '/replacement/'

如果在b:myvar位置使用的变量会发生变化,比如说是一个循环变量,那么这种方法就行不通了(据我所知)。 - hippietrail
1
@hippietrail:循环必须围绕在该行周围,这样才有效果。唯一的限制是用于不同替换,但那时你必须使用表达式而非简单变量,并遵循肯特的回答。 - Ingo Karkat
好的,我对Vim的这个方面非常陌生,我在一个真正的循环中有一个伪循环(全局变量递增),但我已经让它工作了。感谢您的回复。 - hippietrail
1
@markling,你在表达式寄存器中缺少了=。这些是特殊的键序列(类似于映射中的表示法),因此您必须按两次CTRL-R,然后是=,然后输入变量名(b:var1),最后按Enter键。然后您应该在命令行中看到变量内容,并像往常一样进行结论。 - Ingo Karkat
啊,我明白了。我没有仔细阅读答案。谢谢。 - markling
显示剩余3条评论

5

试试这行代码:

:s/123/\=b:myvar/  

这个模式的主体似乎无法工作::s/\=b:myvar/123/ 似乎无法正常运行。 - Alexej Magura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接