如何打开多个与通配符表达式匹配的文件?


10

我想编辑几个与全局表达式匹配的文件。例如,要编辑子目录中的所有git config文件,我可以在shell中执行以下操作:

vim */.git/config

在Vim :命令行上,我希望:find */.git/config做类似的事情(即,打开所有与glob表达式匹配的文件),但是会抱怨E77: Too many file names

是否有Vim命令或单行代码可打开多个与通配符/全局表达式匹配的文件(不涉及编写函数)?

Answers:


8

您可以使用:args {glob}。在您的全局中,**将递归遍历目录。

这将填充参数列表,该列表与以一个或多个文件名作为参数启动Vim时填充的列表相同。

填充参数列表后,您可以使用:next和进行浏览:previous。您也可以使用:first:last命令跳转到第一项和最后一项。


1
Nice :) :args */.git/config实际上也会填充缓冲区列表,因此:bnext也可以使用。这看起来很奇怪吗?(Vim 7.4.52和Neovim)
Justin M. Keyes

1
提醒其他人,如果已安装github.com/tpope/vim-unimpaired,则]a循环该:args列表。
贾斯汀·凯斯

:argadd file*可以。
kenorb

要使用glob模式(**),您需要进行globstar设置,请参见:使用shell globbing匹配所有嵌套目录下的所有文件
kenorb 2015年

@ JustinM.Keyes缓冲区列表是args列表的超集,因此是可以预期的。
jamessan 2015年

3

要在单独的标签中打开匹配的文件,

:n */.git/config | tab all

说明: :n:next)设置下一个文件列表的所有比赛。 tab all在新标签页中的下一个文件列表中打开所有文件。

… 要么 …

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

说明: 在中glob(…),0表示包括所有匹配的文件,即使由于suffixeswildignorecase设置而被忽略。1表示返回列表,而不是字符串。 exe "tabe" f是的缩写execute "tabedit" f,表示f在新标签页中打开由变量指定的文件。


1
看起来像:n */.git/config | buffer作品。
Mateen Ulhaq,

2

在Vim:命令行上,我希望:find */.git/config做类似的事情(即,打开所有与glob表达式匹配的文件),但是它抱怨E77: Too many file names

阅读文档之前不要期望任何东西。

除了汤姆的答案,您还可以直接使用:next代替:args


0

vim */.git/config绝对可以打开文件。如果不是这样,则应将Vim升级到7.4(以前的版本有更多错误)。

或者,尝试以下操作之一(在编辑器内):

:n `find .git/ -name config`
:args `find . -name config`

您没有仔细阅读我的问题。并且,已经接受的答案已经提到:args
贾斯汀·凯斯

@ JustinM.Keyes感谢您的观点。默认情况下,通配符应该工作,这是唯一的答案,说通配符应该在7.4中工作(因为升级之前我有完全相同的错误)。使用args仅是解决办法,但进一步展示了如何使用shell扩展VIM内它自身的情况下,进一步的用户希望使用它来进行更复杂的解决方案,通过使用find,如这一个。因此,我认为这为您的问题提供了更多的价值。所以我希望你一切都好。
kenorb

我从没有遇到过问题vim */foo,并且没有办法与Vim版本相关,因为这是shell功能。
贾斯汀·凯斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.