我试图创建一个简单的vim脚本函数,但遇到了麻烦。此函数需要采用两个输入字符串,然后运行搜索并替换它们的所有实例。我现在有以下几点:
function! FindAndReplaceAll(from, to)
echo a:from
:%s/a:from/a:to/gc
endfunction
当我做:
:call FindAndReplaceAll("test", "test2")
回显a:from可以正常工作,但:%s ...却作用于from和to文字。我注意到我的vim语法高亮甚至没有突出显示它们作为变量,因此我似乎有一个基本的语法问题。
我的问题是:
:call FindAndReplaceAll(test,test2)
因此,我不必添加引号...
最佳答案
你需要改变:%s/a:from/a:to/gc
至:exe '%s/' . a:from . '/' . a:to . '/gc'
您的陈述将按字面意义进行解释。即它将在当前缓冲区中将字符串“a:from”替换为字符串“a:to”。
但是,您打算将a:from
评估的字符串替换为a:to
评估的字符串。这可以通过内置的exe[cute]
函数来实现(您可以通过在命令行模式下键入::h exe
获得帮助)。
至于第二个问题,您必须使用引号,否则引号将被视为变量。
关于VIM功能参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261708/