Vim脚本执行命令每隔一秒跳过一次

时间:2019-05-10 21:35:27

标签: vim

我正在全力以赴地学习有关脚本的更多信息。为什么脚本只替换找到的第二个单词? 我知道有更好的方法来替换光标下的单词,例如nnoremap <F6> :%s/<C-r><C-w>/,但问题仍然存在。 我尝试使用了replace()函数,但是那根本不起作用。

function! FReplace(rep)
    let f = expand("<cword>")
    echo "Find:" f "      Replace with:" a:rep
    execute "%s/"f"/"a:rep"/g"
endfunction

command! -nargs=1 Replace call FReplace(<f-args>)

虚拟文本中的一行仅从

更改
xxx xxx xxx xxx xxx xxx xxx xxx 

yyy xxx yyy xxx yyy xxx yyy xxx

但它们都应该是yyy

1 个答案:

答案 0 :(得分:1)

来自:help :execute

  

多个参数串联在一起,中间有一个空格   之间。为避免多余的空间,请使用“。”   运算符将字符串连接成一个参数。

这意味着,如果f'xxx',而a:rep'yyy'

execute "%s/"f"/"a:rep"/g"

等同于

execute "%s/ xxx / yyy /g"

刚刚运行

%s/ xxx / yyy /g

此处(标记为^)都是一行示例数据中的所有匹配项:

xxx xxx xxx xxx xxx xxx xxx xxx
   ^^^^^   ^^^^^   ^^^^^

第二个单词不匹配,因为空格是匹配的一部分,并且匹配不能重叠。

解决方法是给:execute一个字符串,不带多余的空格:

execute "%s/" . f . "/" . a:rep . "/g"