我正在尝试使用 vim 打开并编辑一系列文件。我预期的行为是 vim 打开一个文件,我编辑它,输入:wq
,vim 关闭并保存该文件,然后立即打开下一个文件供我开始编辑。
我做了一些谷歌搜索,然后一些 结果vim *
提供了or的解决方案vim pattern*
,并对标准 unix shell 文件通配语法进行了变体。
然而,当我在我的系统上尝试这个时,我得到了意想不到的行为。在我编辑 和 后:wq
,vim 似乎再次打开相同的第一个文件(带有保存的更改),然后另一个:wq
将我转储回命令行。没有打开其他文件进行编辑
编辑我尝试了两种方法来转义星号,以防某些东西无法正确读取全局
$ vim webform.webform.\*
$ vim "webform.webform.*"
然而,这两种语法都给了我一个 vim 屏幕,它正在编辑一个带有文字名称的新文件webform.webform.*
这是我最初尝试的,但出现了意想不到的行为:
$ vim webform.webform.*
Vim 打开第一个文件:
... ...
100 draft_pending_multiple_message: ''
101 confirmation_type: page
102 confirmation_title: ''
103 confirmation_message: ''
"webform.webform.my_webform.yml" 184L, 8621C
我编辑文件,保存并关闭它:
:wq
Vim 注意到更改已写入,指示还有多少文件需要编辑,出于某种原因希望我按 Enter 键:
"webform.webform.my_webform.yml" 184L, 8621C written
E173: 130 more files to edit
Press ENTER or type command to continue
然后它再次打开刚刚打开的第一个文件。
100 draft_pending_multiple_message: ''
101 confirmation_type: page
102 confirmation_title: ''
103 confirmation_message: ''
1,1 Top
我保存并关闭:
:wq
现在我回到了 bash 提示符,vim 中没有打开任何其他文件。
$
我想打开一个文件,编辑它,保存它,关闭它,然后编辑下一个文件。我究竟做错了什么?
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 21 2019 04:10:35)
...
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
...
答案1
问题不在于通配符。每个文件都是在缓冲区中打开的,并且不能使用:wq
退出缓冲区。您可以用来:w|bd
保存当前缓冲区并卸载它。但我觉得它很笨拙。更好的方法是-p
在调用 Vim 时添加该标志:
vim -p webform.webform.*
这会导致每个文件在新选项卡中打开,然后您可以使用:wq
(或:x
)保存文件并关闭选项卡。
答案2
根据 icarus 的评论,使用:wn
, write
then next
, 而不是:wq
让我得到所需的行为,而且我不必在 vim 中输入两个单独的命令。