当使用程序员文本编辑器vi时,我经常使用通配符搜索对我要编辑的文件很懒惰
vi ThisIsAReallLongFi*.txt
如果匹配单个文件,则效果很好。但是,如果它匹配多个文件,则vi会做一些奇怪的事情。
首先,它打开第一个用于编辑的文件
其次,当我:wq退出文件时,我收到一条消息,终端底部看起来像这样
E173: 4 more files to edit
Hit ENTER or type command to continue
当我按Enter键时,会将我返回到我刚刚进入的文件中的编辑模式。我期望的行为是vi将转移到下一个要编辑的文件。
所以,
这里vi行为的逻辑是什么
有没有办法继续并编辑下一个匹配的文件?
是的,我知道标签完成,这个问题是基于好奇心并且想要更好地理解shell。
答案 0 :(得分:40)
vi支持有多个文件可供编辑。 :n
转到下一个文件,:N
转到上一个文件。使用:h arglist
获取更多信息。
答案 1 :(得分:7)
回答当前的问题
您可以写:vim -p myfile*
,vim会将当前目录中myfile*
的所有匹配项打开到多个标签中。然后,您可以逐个编辑所有文件。使用gt
导航到下一个标签,然后gT
导航到上一个标签。要一次性保存和退出所有文件,只需在vim中写入:wqa
。
回答类似问题
我遇到了类似的问题。我在当前目录的多个子目录中有一个名为“myfile *”的文件。我想编辑所有这些中的一个小变化,而不是一个接一个地打开它们。所以,在命令行中,我写了这个:
$find . -type f -name "myfile*" -exec vim -f {} \;
这样,find为每个文件运行vim。一旦我退出vim实例,find会自动运行另一个文件,直到完成所有这些文件。虽然,我同意如果所有文件都可以作为选项卡打开会更好。