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