Vim:closures所有的缓冲区,但这一个

如何closuresVim中的所有缓冲区,除了我正在编辑的那个?

你可以从vim.org使用这个脚本:

http://www.vim.org/scripts/script.php?script_id=1071

把它放到你的.vim/plugin目录下,然后使用:BufOnly命令closures所有的缓冲区,但是活动的。 你也可以在你的.vimrc里把它映射到你喜欢的地方。

Github上的源码(通过vim-scripts镜像): https : //github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim

尝试这个

 bufdo bd 

bufdo为所有缓冲区运行命令

http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers

如果你不在乎现在的,更简单的做一些类似的事情(不需要脚本):

 1,100bd 

我这样做

 :w | %bd | e# 

我最喜欢的,如果我只是想打开我的当前缓冲区并closures所有其他的。

它是如何工作的:首先写入当前缓冲区的更改,然后closures所有打开的缓冲区,然后重新打开当前所在的缓冲区。 在Vim中, | 将命令的执行链接在一起。 如果你的缓冲区是最新的,上面可以缩写为:%bd | e# :%bd | e#

build立在juananruiz的答案。

然后,在要保留的缓冲区中进行小的更改

:1,1000bd

命令bd (缓冲区删除)不会删除未保存更改的缓冲区。 这样可以将当前(更改)的文件保存在缓冲区列表中。

编辑:请注意,这也将删除您的NERDTreeBuffer。 你可以拿回来:NERDTree

我能够很容易地做到这一点:

 :%bd|e# 

通过使用

 :on[ly][!] 

 :h only 

closures所有打开的缓冲区:

 silent! execute "1,".bufnr("$")."bd" 

closures除当前所有打开的缓冲区:

 function! CloseAllBuffersButCurrent() let curr = bufnr("%") let last = bufnr("$") if curr > 1 | silent! execute "1,".(curr-1)."bd" | endif if curr < last | silent! execute (curr+1).",".last."bd" | endif endfunction 

将此函数添加到.vimrc并使用:call CloseAllBuffersButCurrent() .vimrc调用它:call CloseAllBuffersButCurrent()

便利地图:

 nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR> 

有一个插件可以做到这一点,还有更多!

看看close-buffers.vim

我喜欢1,100bd ( 由juananruizbuild议 ),似乎为我工作。

我加了一个quit! 给我的地图给我

 nnoremap <leader>bd :1,100bd<CR> nnoremap <leader>bdq :1,100bd<CR>:q!<CR> 

这杀死了所有的缓冲区,并closures了Vim,这正是我所需要的。