如何在Vim中关闭单个缓冲区(从许多缓冲区中)?

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

vim a/*.php

打开23个文件。

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

:q

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

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

295889 次浏览

如何

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

检查你的缓冲区id使用 :缓冲区< / p >

你会看到一个缓冲区列表

1  a.php
2  b.php
3  c.php

如果你想从buffer中删除b.php

:2bw

如果你想从缓冲区中删除/关闭所有

:1,3bw

使用:

  • :ls -列出缓冲区
  • :bd#n -关闭缓冲区,其中#n是缓冲区编号(使用ls来获得它)

例子:

  • 删除缓冲区2:

    :bd2
    

如果前面的答案没有说明这一点:

:双相障碍将关闭当前缓冲区。如果你不想获取缓冲列表。

提醒一句:“bw中的w不代表写入,而是代表清除!”

更多手册:

# EYZ0

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

.文件不受影响

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

# EYZ0

像|:bdelete|,但真正删除| 缓冲区。< / p >

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

也许改用标签?

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

gtgT来回切换标签

:q只关闭当前选项卡

:qa关闭所有内容并退出

:tabo关闭除当前选项卡外的所有内容

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

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

从我的vimrc

与其浏览:ls命令的输出并通过指定缓冲区的编号来删除(unload, wipe..)缓冲区,我发现使用文件名通常更有效。

例如,在我打开了几个.txt文件后,我的一些精细点的记忆。复制并粘贴几行文本作为模板。等。我将输入以下内容:

:bd txt <Tab>

注意,匹配的字符串不必位于文件名的开头。

上面显示了屏幕底部匹配“txt”的文件名列表,并保持我最初输入的:bd命令不变,准备完成。

这里有一个例子:

doc1.txt doc2.txt
:bd txt

我可以退格在“txt”位,并输入我想删除的文件名,但这变得非常方便,因为我不必这样做:如果我第二次按Tab键,Vim会自动完成我的命令与第一个匹配:

:bd doc1.txt

如果我想去掉这个缓冲区,我只需要按回车键。

如果我要删除的缓冲区恰好是第二个(第三..等)匹配,我只需要继续按Tab键,使我的:bd命令循环通过匹配列表。

当然,这个方法也可以通过以下命令切换到给定的缓冲区:b..:某人. .等。

当设置了“hidden”Vim选项时,这种方法特别有用,因为缓冲区列表可能很快变得相当大,覆盖了几个屏幕,并且很难找到我正在寻找的特定缓冲区。

为了充分利用这个特性,最好阅读下面的Vim帮助文件,并相应地调整Tab命令行补全的行为,使其最适合您的工作流程:

:help wildmode

我上面描述的行为是由以下设置产生的,为了保持一致性,为了模拟bash完成,我选择了以下设置:

:set wildmode=list:longest,full

与使用缓冲区编号相反,这种方法的优点是,我通常至少记得给定文件名的一部分,这让我可以直接定位缓冲区,而不必首先通过:ls命令查找它的编号。

那些使用缓冲区或树导航插件,如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相同。您可以修改此功能以与您自己的配置集成。

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

如果你想关闭一个缓冲区而不破坏你的窗口布局(基于分割的当前布局),你可以使用像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