vim - Vim 脚本执行命令每隔一秒替换一次
问题描述
我正在研究函数以了解有关脚本的更多信息。为什么脚本只替换找到的第二个单词?我知道有更好的方法来替换光标下的单词,例如nnoremap <F6> :%s/<C-r><C-w>/
,但问题仍然存在。我尝试使用替代()函数,但这根本不起作用。
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
。
解决方案
来自: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"
推荐阅读
- google-app-engine - 无法使用 API KEY 连接到 GCP mysql 数据库,错误:请求中指定的项目无效
- python - Python给出了正则表达式的意外结束
- c# - 不明白为什么它不断抛出 System.InvalidOperationException
- kubernetes - 部署在 kubernetes 上的 open-faas 如何确定何时扩大或缩小功能?
- android - 在 Android 项目中找不到 R 文件
- https - Symfony4 - 创建 https 路由
- python - 解析 krb5.conf 文件的 Python 库
- email - 在 Google Apps 脚本中使用 DriveApp.getFileById 发送多个附件
- javascript - 使用 Lodash 在嵌套对象中分组和合并
- java - 如何实现报警接收器?