例如,我在Vim中通过运行打开几个文件

vim a/*.php

打开23个文件。

然后我进行编辑并运行以下两次

:q

这就关闭了所有的缓冲区。

如何在Vim中只关闭一个缓冲区?


当前回答

在不关闭窗口的情况下关闭缓冲区

如果你想关闭一个缓冲区而不破坏你的窗口布局(基于分割的当前布局),你可以使用像bbye这样的插件。基于这个,你可以用

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

或者只是在.vimrc中创建一个映射,以便于访问

:nnoremap <Leader>q :Bdelete<CR>

优于vim的:bdelete和:bwipeout

从插件的文档:

关闭并删除缓冲区。 在该窗口中显示另一个文件。 如果没有打开其他文件,则显示空文件。 如果您决定在该窗口中编辑另一个文件,不要留下无用的[无文件]缓冲区。 即使文件在多个窗口中打开也可以工作。 可以使用各种缓冲浏览器和选项卡。

:bdelete vs:bwipeout

从插件的文档:

Vim有两个命令用来关闭缓冲区::bdelete和:bwipeout。前者从缓冲区列表中删除文件,清除其选项、变量和映射。但是,它仍然在跳转列表中,所以Ctrl-o将您带回去并重新打开文件。如果这不是你想要的,使用:bwipeout或Bbye的等效:bwipeout,而你本可以使用:bdelete。

其他回答

提醒一句:“bw中的w并不代表write,而是代表wipeout!”

更多手册:

:bd

卸载缓冲区[N](默认值:当前 Buffer)并将其删除 缓冲列表。如果缓冲区被更改,则失败, 除非当[!],在这种情况下更改 丢失。 该文件不受影响。

如果你知道你在做什么,你也可以使用:bw

:bw

比如|:bdelete|,但是真正删除的是 缓冲区。

如何

vim -O a a

这样你就可以在左边编辑一个文件,在右边浏览整个目录…… 只是一个想法,不是解决方案……

[编辑:这是一个愚蠢的建议,因为当时我还不太了解Vim。请不要使用制表符代替缓冲区;标签是Vim的“窗口布局”]

也许改用标签?

Vim -p a/*.php在选项卡中打开相同的文件

gt和gt来回切换标签

:q只关闭当前选项卡

:qa关闭所有内容并退出

:tabo关闭除当前标签外的所有内容

您还可以将next和previous映射到功能键,从而使在缓冲区中的循环变得轻而易举

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

从我的vimrc

那些使用缓冲区或树导航插件,如Buffergator或NERDTree,将需要在破坏当前缓冲区之前切换这些分割-否则你将把你的分割发送到wonkyville

我使用:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

在列表中的“NERDTreeToggle”与输入:NERDTreeToggle相同。您可以修改此功能以与您自己的配置集成。