在 vim 中,如何将缓冲区列表中与模式匹配的文件添加到参数列表中?

In vim, how do you add files from the buffer list - that match a pattern - to the arguments list?

说我打开 vim 没有参数,然后从 vim 中打开 10 .txt 文件和 10 个 .py 文件。另外,假设文件散落在我的文件周围 系统。缓冲区列表包含所有 20 个文件。

现在我想将 10 个 .py 文件添加到参数列表中。我想要做 类似于 :argadd *.py,但这只会创建一个名为“*.py”的新文件 并将其添加到参数列表中。

我从帮助中看到argd[elete]可以使用一个模式,所以我可以删除所有 :argd *.py 的 .py 文件。有没有办法做类似的事情 :arga[dd]?

:[count]arga[dd] {name} ..
            Add the {name}s to the argument list.  

:argd[elete] {pattern} ..
            Delete files from the argument list that match the
            {pattern}s.

肯定有比导航到每个 .py 文件和 运行 更好的方法 :argadd?

好吧,我认为这是一个“编造”的问题。一个人很少同时需要这么多 buffers/args,天真的 :argadd #10 #12 #15 #20 是完全不切实际的。

但是如果你坚持你需要这个那么我建议尝试表达式寄存器,有点像

:argadd <C-R>=join(expand("*.py",1,1))<CR>

您可以通过一个简单的命令遍历所有缓冲区并将它们添加到基于一些判别式的参数列表中:

:bufdo if &ft == 'python' | argadd | endif

或者,如果您真的不喜欢打字:

:bufdo if&ft=='python'|arga|en

参见:help :bufdo