使用通配符在vi中编辑多个文件

37

在使用程序员文本编辑器vi时,我经常使用通配符搜索来懒惰地找到想要编辑的文件。

vi ThisIsAReallLongFi*.txt

如果只匹配到一个文件,它工作得很好。但是,如果匹配多个文件,Vi会出现一些奇怪的行为。

首先,它会打开第一个文件进行编辑。

其次,当我从文件中使用 :wq 退出时,终端底部会显示如下消息:

E173: 4 more files to edit
Hit ENTER or type command to continue

当我按下回车键时,vi会将我返回到刚才所处的文件的编辑模式中。 我期望的行为是vi继续进入下一个要编辑的文件。

所以:

  1. vi这里的行为逻辑是什么?

  2. 是否有一种方法可以转到并编辑匹配的下一个文件?

是的,我知道关于选项卡自动完成的内容,但这个问题是基于好奇心并希望更好地了解shell。

2个回答

57

vi支持同时编辑多个文件。使用:n跳转到下一个文件,:N跳转到上一个文件。使用:h arglist获取更多信息。


10

对于当前问题,你可以输入:vim -p myfile*,vim 将会在多个标签页中打开当前目录下匹配 myfile* 的所有文件。然后,您可以逐个编辑所有文件。使用 gt 命令跳转到下一个标签页,使用 gT 命令跳转到上一个标签页。如果要一次保存并退出所有文件,只需在 vim 中输入 :wqa

对于类似的问题,我之前遇到过相同的情况。我有一个名为 "myfile*" 的文件,分别位于当前目录下的多个子目录中。我想要在不逐个打开它们的情况下,对它们所有进行小的修改。所以,在命令行中,我输入了以下内容:

$find . -type f -name "myfile*" -exec vim -f {} \;

这种方法会为每个文件运行 vim。只要我退出一个 vim 实例,find 命令就会自动运行下一个命令,直到所有文件都处理完毕。虽然我同意,如果所有的文件可以作为标签页打开,那么这将更好。


3
另外,由于最多可以同时打开的标签页数为10,因此您可以在~/.vimrc中设置自定义的tabpagemax来增加限制,以提高使用的便利性。详情请参考链接 - Campa
+1 是为了展示如何在子目录中搜索以及展示“-exec”参数用于“find”。顺便问一下,末尾的“;”是什么意思? - Dimitry K
// @Abhinav,感谢您的最佳回答。这值得更多的投票。 - Nathan Basanese
@DimitryK 四年晚了,但 \; 是为了标记 -exec 命令的结束,因为您可以将多个参数传递给命令,然后是 find 选项。 \ 仅用于转义分号,您也可以执行例如 find . -exec foo bar {} baz ';' -type f - coolreader18

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接