如何关闭Vim中的单个缓冲区(多个)?

时间:2009-08-13 01:59:05

标签: vim buffer

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

vim a/*.php

打开23个文件。

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

:q

关闭所有缓冲区。

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

10 个答案:

答案 0 :(得分:505)

提醒一句:“w不代表写作,而是代表wipeout!”

更多来自手册:

<强>:BD

  

卸载缓冲区[N](默认值:当前   缓冲区)并从中删除                   缓冲区列表。如果缓冲区已更改,则会失败,                   除非指定[!],否则更改为   丢失。                   该文件不受影响。

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

<强>:BW

  

喜欢|:bdelete |,但确实删除了   缓冲液中。

答案 1 :(得分:341)

如果以前的答案没有明白这一点:

:bd 将关闭当前缓冲区。如果您不想获取缓冲区列表。

答案 2 :(得分:93)

使用检查您的缓冲区ID :缓冲器

你会看到那里的缓冲区列表

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

如果你想从缓冲区中删除b.php

:2bw

如果要删除/关闭所有缓冲区

:1,3bw

答案 3 :(得分:39)

不是浏览:ls命令的输出,而是通过指定数字来删除(卸载,擦除...)缓冲区,我发现使用文件名通常更有效。

例如,在我打开几个.txt文件以刷新我的一些细节的记忆之后..复制并粘贴几行文本以用作各种类型的模板......等等我输入以下内容:

:bd txt <Tab>

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

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

以下是一个例子:

doc1.txt doc2.txt
:bd txt 

我可以在'txt'位上退格并键入我想要删除的文件名,但这变得非常方便的是我不必:如果我第二次点击Tab键,Vim会自动第一场比赛完成我的命令:

:bd doc1.txt

如果我想摆脱这个特定的缓冲区,我只需要按Enter键。

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

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

当设置'隐藏'Vim选项时,此方法特别有用,因为缓冲区列表可能很快变得非常大,覆盖多个屏幕,并且很难找到我正在寻找的特定缓冲区。

要充分利用此功能,最好阅读以下Vim帮助文件并相应调整Tab命令行完成的行为,以便最适合您的工作流程:

:help wildmode

我上面描述的行为来自以下设置,为了模仿bash完成,我为了一致性而选择这个设置:

:set wildmode=list:longest,full

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

答案 4 :(得分:35)

使用:

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

示例:

  • 删除缓冲区2:

    :bd2
    

答案 5 :(得分:14)

您也可以将下一个和上一个映射到功能键,使缓冲区循环变得轻而易举

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

来自我的vimrc

答案 6 :(得分:1)

怎么样

vim -O a a

通过这种方式,您可以编辑左侧的单个文件并导航右侧的整个目录... 只是一个想法,而不是解决方案......

答案 7 :(得分:1)

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

也许切换到使用标签?

vim -p a/*.php在标签

中打开相同的文件

gtgT来回切换标签

:q仅关闭当前标签

:qa关闭所有内容并退出

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

关闭缓冲区而不关闭窗口

如果要关闭缓冲区而不破坏窗口布局(基于拆分的当前布局),则可以使用bbye之类的插件。基于此,您可以使用

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

或者只需在您的.vimrc中创建一个映射即可,例如

:nnoremap <Leader>q :Bdelete<CR>

vim的:bdelete和:bwipeout优势

来自plugin's documentation

  • 关闭并删除缓冲区。
  • 在该窗口中显示另一个文件。
  • 如果没有其他文件打开,请显示一个空文件。
  • 如果您决定在该窗口中编辑另一个文件,请不要使用无用的[no file]缓冲区。
  • 即使一个文件在多个窗口中打开也可以工作。
  • 可以使用各种缓冲区浏览器和标签栏正常工作。

:bdelete与:bwipeout

来自plugin's documentation

Vim有两个用于关闭缓冲区的命令::bdelete:bwipeout。前者从缓冲区列表中删除文件,清除其选项,变量和映射。但是,它仍保留在跳转列表中,因此Ctrl-o将带您返回并重新打开文件。如果那不是您想要的,请使用:bwipeout或Bbye等效的:Bwipeout