我正在尝试创建一个简单的vim脚本函数,我遇到了麻烦.此函数需要获取两个输入字符串并运行搜索并替换它们的所有实例.我现在有以下内容:
function! FindAndReplaceAll(from, to)
echo a:from
:%s/a:from/a:to/gc
endfunction
Run Code Online (Sandbox Code Playgroud)
当我做:
:call FindAndReplaceAll("test", "test2")
Run Code Online (Sandbox Code Playgroud)
echo a:from正常工作但是:%s ...代替了from和to literals.我注意到我的vim语法高亮度甚至没有突出显示那些变量,所以我似乎有一个基本的语法问题.
我的问题是:
无论如何,允许将其称为
:调用FindAndReplaceAll(test,test2)
所以我不必添加引号......
Hui*_*eng 15
你需要改变
:%s/a:from/a:to/gc
至:
exe '%s/' . a:from . '/' . a:to . '/gc'
您的陈述按字面解释.即它将在当前缓冲区中用字符串"a:to"替换字符串"a:from".
但是你打算用意大利语替换用字符串评估的a:from字符串a:to.这可以通过内置exe[cute]函数来实现(您可以通过:h exe在命令行模式下键入来获得帮助).
至于你的第二个问题,你必须使用引号,否则它们将被视为变量.