如何使用 bufdo 运行替代命令?

问题描述 投票:0回答:2

我搜索了一些文档,但似乎找不到令人满意的答案。

基本上我想在每个缓冲区的末尾插入一个新行并填充此行 与打开缓冲区的修改文件名。

示例:

SomeText
\<old_eof\>

成为

Some text
result of substitute(expand("%t"), "txt", "csv", "") and some wrapping text
\<new_eof\>

我已经尝试过

:bufdo normal Go<C-R>=substitute(expand("%t"), "txt", "csv", "")

但是,这仅输出

<C-R>=substitute(expand("%t"), "txt", "csv", "")

编辑:

我通过简单地录制宏并使用来找到了一个部分解决方案

:bufdo normal @a
然而,这不是我想要的路。

vim neovim
2个回答
1
投票

你是怎么做到的

<C-R>
?您是否分别按
<
C
-
R
>
?你按
Ctrl+R
吗?

无论如何,使用普通模式宏听起来并不是一个很好的方法来做你想做的事。

:help :put
更合适:

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

其中

$
是最后一行的地址。

请注意,我用单引号替换了双引号,因为,好吧……我们可以说

:put
有它的特性。


0
投票

您可以通过

:execute
创建命令,如下所示:

:bufdo execute 'normal Go'..substitute(expand('%:t'),'txt','csv','')

这不是最优雅的方法*,但它对我有用。

有关命令和使用 :help execute

 运算符连接字符串的说明,请参阅 
..


*)当我输入这个答案时,romainl 提出了一个更漂亮的解决方案。现在我已经输入了这几行内容,我不妨将它们发布...

© www.soinside.com 2019 - 2024. All rights reserved.