如何在Vim中一次打开多个文件?


87

有没有办法从Vim中打开目录中的所有文件?因此:command,这实际上表示“将所有文件打开/some/path到缓冲区中”。

理想情况下,最好以递归方式在目录下打开所有文件。

Answers:


105

您要查找的命令是args:

例如:

:args /path_to_dir/*

将打开目录中的所有文件


32
用于**递归匹配文件。例如:args /path_to_dir/**
daf 2010年

1
要打开不带扩展名的文件,请指定父目录,例如args ** /。hg / hgrc有效,而** / hgrc无效。
79E09796

11
打开文件后,:tab all可将它们放在单独的选项卡中。
Backlin 2014年

“所有文件”将包含可能不需要的子目录。(我的vim错误"/path_to_dir/subdir/" Illegal file name)。快速的解决方案是运行第二条命令argd */,再次将其从列表中删除
不太

最好通过以下建议完成答案:作为一种好的做法,并且为了显示如何将相同的命令集应用于已打开的所有文件,可以执行以下命令以应用所有命令包含在my_commands_batch.vim文件中:argdo source my_commands_batch.vim
aturegano,2016年

21

如果要打开所有以某个扩展名结尾的文件,为什么它不起作用?我试过了

:n ./**.cs

并仅打开当前目录中的文件。

我找到了答案正确的代码是 :n **/*.cs

想要查询更多的信息 :h find


9

你试过了吗

:n /some/path/*

它将打开/ some / path中的所有文件

我认为它不会递归地打开文件。

编辑

也许使用**将按daf所述递归打开


:n是什么意思?查看vim的帮助仅表明我“重复最后一个模式” ..我知道这是按键。有没有办法只获得命令模式的帮助?
U0001

1
太简单了:h:n ..获得有关“:n”的帮助。我不喜欢回答自己的问题吗?)
U0001

4

一种不需要弄乱的方法args是将文件列表放在文本文件中,然后使用:so命令在该文件中运行命令。

例如,如果要打开.php以给定目录结尾的所有文件,请首先创建一个files.txt包含文件列表的文件,并在其前面加上要用来打开它们的任何命令。

sp alpha.php
sp bravo.php
sp charlie.php

然后,在vim中:

:so files.txt

如果文件列表很大,则files.txt通过将输出重定向ls到文件,然后使用vim宏sp在每个文件名之前添加前缀来快速生成文件是相对简单的。

显然,这不如使用argsandargdo命令优雅,但这些命令也要复杂得多。

也许也可以通过命令行上的单个命令来执行此操作,但是即使16年之后,我仍然发现vim编程很奇怪而且很神秘。


有趣!听起来,这是一种控制需要打开哪些文件的好方法,而不是盲目地打开给定目录的所有文件(如果这些文件不是全部​​必需的话)。
cram2208 2015年

1

递归打开文件的另一种方法

find . -type f -exec vi {} \;

4
不符合“来自Vim内部”的限制。
ZyX

却没有做所需的事情:)
流氓一人

3
它不是。所需的是从vim中递归给定目录中的文件。如果要放弃条件,您最好也可以说kate **/*(^/)(使用zsh globbing语法)可以完成所需工作:递归地从给定目录中打开文件。它不是“从内部”,根本没有使用vim,而是“还需要做”。甚至kate ~/.vimrc ~/.bashrc。完全省略“ from withing”,“ from the给定目录”和“ recursively”,但它“还做了所需的工作”:打开文件。
ZyX

一次打开一个文件
Paul

1

如果您想添加到参数列表;

:arga what_you-d_like_to_add

看到

:he arga

from / in vim了解更多信息。

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.