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

类似的东西(即,打开所有与glob表达式匹配的文件),但它抱怨:。是否存在Vim命令或单行代码来打开多个与通配符/ glob表达式匹配的文件(即是否涉及编写函数)?

#1 楼

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

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

一旦填充了参数列表,就可以使用:next:previous在其中导航。您还可以使用:first:last命令跳转到第一项和最后一项。

评论


好的:):args * /。git / config实际上也会填充缓冲区列表,所以:bnext也可以。这看起来很奇怪吗? (Vim 7.4.52和Neovim)

–贾斯汀·凯斯(Justin M. Keyes)
15年3月18日在4:00

提醒其他人,如果安装了github.com/tpope/vim-unimpaired,]a循环:args列表。

–贾斯汀·凯斯(Justin M. Keyes)
15年3月18日在4:01

:argadd文件*也可以。

– Kenorb
15年3月18日在12:26



要使用glob模式(**),需要设置globstar,请参阅:使用shell globbing匹配所有嵌套目录下的所有文件。

– Kenorb
15年4月18日在22:53

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

–詹姆斯
15年4月23日在14:34

#2 楼


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


不要'在阅读文档之前不要期待任何事情。

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

#3 楼

要在单独的选项卡中打开匹配的文件...

:n */.git/config | tab all


说明::n:next)将下一个文件列表设置为所有匹配项。 tab all在新选项卡中打开下一个文件列表中的所有文件。包括所有匹配的文件,即使由于glob(…)suffixes设置否则它们也将被忽略。 1表示返回列表,而不是字符串。 wildignorecaseexe "tabe" f的缩写,表示在新选项卡中打开变量execute "tabedit" f指定的文件。

评论


看起来像:n * /。git / config |缓冲工程。

–玛蒂·乌尔哈克(Mateen Ulhaq)
19-10-31在23:17

#4 楼

绝对已经在其他答案中解决了这个问题,但是tl; dr
在缓冲区中打开: > :n <your-file-glob>
用于:

VIM-Vi IMproved 8.2(2019年12月12日,编译于2020年7月23日16:01:01)
在Linux上运行(Clear Linux)


评论


欢迎来到Vi和Vim!如果您不介意我问,是否有理由总结其他答案中的内容?

– D. Ben Knoble♦
20年8月13日在13:57

是的,只是以一种最简单的方式获得了一个人想要使用的最常用方法,所有这些都在一个答案中。我喜欢人们提供的见解和细节,但是当您想要的只是“立即回答”时,因为您还有10项重要的工作要做...。当您想了解更深入的细节时,请回来阅读全部更好的答案和评论,涉及同一主题的大约5个不同的问题,那么您很高兴。但是有时候,您只想简单明了。

–克里斯
20年8月13日在22:46



#5 楼

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

评论


您没有仔细阅读我的问题。并且,可接受的答案已经提到了:args。

–贾斯汀·凯斯(Justin M. Keyes)
2015年4月20日在1:59



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

– Kenorb
2015年4月20日在10:42



我从来没有遇到过vim * / foo的问题,并且没有办法与Vim版本相关,因为这是一个shell功能。

–贾斯汀·凯斯(Justin M. Keyes)
15年4月20日在21:32

#6 楼

显而易见,但未在上面列出-示例查找名称中具有create_table字符串的所有sql文件

:args **/*create_table*sql


并检查它们br />
并打开第一个
:ls