You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bufdo执行替换命令,批量为缓冲区添加修改后的文件名?

解决Vim批量在缓冲区末尾插入修改后文件名的问题

你的问题出在:bufdo normal命令里的<C-R>=不会被Vim解析为表达式求值,而是直接作为普通字符输出。以下是两种更直接的解决方案:

方法1:结合execute与normal

用execute先计算出表达式结果,再传递给normal执行:

:bufdo execute "normal Go" . substitute(expand("%:t"), "txt", "csv", "")
  • expand("%:t") 获取当前缓冲区的文件名(不带路径,你之前的%t是%:t的笔误)
  • substitute(...) 将文件名的txt扩展名替换为csv
  • execute把"Go"(跳转到行尾并插入新行)和替换后的文件名拼接,让normal执行完整的插入动作

方法2:用put命令更简洁

$put可以直接在缓冲区末尾插入内容,配合表达式求值更高效:

:bufdo $put =substitute(expand("%:t"), "txt", "csv", "")
  • $定位到缓冲区最后一行
  • =...表示插入表达式的计算结果,省去了切换到插入模式的步骤

扩展:添加包裹文本

如果需要给文件名加上自定义包裹(比如--- filename.csv ---),只需修改表达式部分:

:bufdo $put ='--- ' . substitute(expand("%:t"), "txt", "csv", "") . ' ---'

内容的提问来源于stack exchange,提问作者Audiochemie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:55:06