VIM功能参数传递

Dav*_*ond 9 vim

我正在尝试创建一个简单的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语法高亮度甚至没有突出显示那些变量,所以我似乎有一个基本的语法问题.

我的问题是:

  1. 这有什么正确的语法?我很感激为什么而不仅仅是答案的解释.为什么以上不正确?
  2. 无论如何,允许将其称为

    :调用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在命令行模式下键入来获得帮助).

至于你的第二个问题,你必须使用引号,否则它们将被视为变量.