Vim - 在一个命令中保存和关闭缓冲区

Joe*_*Joe 27 vim buffer

我在一个目录中有一堆文本文件,我知道我需要单独编辑每个文件。

我从推荐行开始

vim *.txt
Run Code Online (Sandbox Code Playgroud)

它在vim中将文件作为单独的缓冲区打开,让我看着第一个。我编辑它 - 然后我使用 ':w' 保存它并使用 ':bd' 关闭缓冲区并继续下一个。

这个用于保存和关闭缓冲区的 ':w:bd' 对我来说感觉很长,我怀疑有一种更像 vim ninja 的方法 - 一举保存和关闭您正在处理的缓冲区的推荐方法是什么?

Ing*_*kat 25

在命令行上将文件传递给 Vim 时,它们不仅会在缓冲区中打开,还会填充参数列表。因此,您可以使用像:next和 之类的命令:first来浏览它们(以及:argdo批处理,这可能是一个绝妙的技巧)。我为您的问题推荐的命令是:wnext(short form :wn),它:write是当前缓冲区,然后转到那个缓冲区:next

您不需要明确:bdelete的缓冲区,尤其是当您从命令行启动 Vim 并使用一组文件然后在完成后退出时。(我能想到的唯一例外是卸载一个巨大的文件以节省系统内存,或者重新使用单个 GVIM 实例进行许多不同的编辑。)

但是,如果你真的想要这个,只需定义一个自定义命令,例如

:command Wd write|bdelete
Run Code Online (Sandbox Code Playgroud)

  • 您已经提到了两种实现 OP 要求的方法,但第二种方法并不明显:`:w|bd`。 (8认同)

apo*_*pol 5

虽然我同意您不必删除当前未使用的打开缓冲区,但我喜欢删除它们,因为我启用了vim-airline的选项卡行,它始终在顶部显示所有打开的缓冲区窗户。我的 中有以下内容.vimrc

nnoremap qq :w\|bd<cr>
Run Code Online (Sandbox Code Playgroud)

qq保存并关闭当前缓冲区,但也会扰乱 vim 的“记录宏”功能(我对此很满意)。

  • 我想到了内置的“ZZ”,但这最终会完全保存并退出 Vim,而不是仅仅删除缓冲区。对于那些发现宏比将视图集中在当前光标行更有价值的人来说,小写的“zz”可能是一个有趣的替代映射。 (2认同)