When using the programmers text editor vi, I'll often use a wildcard search to be lazy about the file I want to edit
vi ThisIsAReallLongFi*.txt
When this matches a single file it works great. However, if it matches multiple files vi does something weird.
First, it opens the first file for editing
Second, when I :wq out 开发者_如何学Cof the file, I get a message the bottom of the terminal that looks like this
E173: 4 more files to edit
Hit ENTER or type command to continue
When I hit enter, it returns me to edit mode in the file I was just in. The behavior I'd expect here would be that vi would move on to the next file to edit.
So,
What's the logic behind vi's behavior here
Is there a way to move on and edit the next file that's been matched?
And yes, I know about tab completion, this question is based on curiosity and wanting to understand the shell better.
vi supports having multiple files available for editing. :n
goes to the next file, :N
goes to the previous. Use :h arglist
for more information.
ANSWER TO CURRENT QUESTION
You may write: vim -p myfile*
and vim will open all the matches for myfile*
in the current directory into multiple tabs. Then, you can edit all files one by one. Navigate using gt
for going to the next tab and gT
for going to the previous tab. For saving and quiting all the files in a single go, just write :wqa
inside vim.
ANSWER TO A SIMILAR PROBLEM
I was facing a similar problem. I had a file named "myfile*" inside multiple subdirectories of my current directory. I wanted to edit a small change in all of them without getting to open them one by one. So, in the command line, I wrote this :
$find . -type f -name "myfile*" -exec vim -f {} \;
This way, find runs vim for each file. As soon as I quit an instance of vim, find automatically runs another with the next file until all of them have been done. Although, I agree that it would have been better if all the files could have been opened as tabs.
精彩评论