我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?
当前回答
票数最高的答案将重新打开缓冲区,它将失去我们正在工作的当前行。 关闭然后重新打开将导致屏幕刷新
function! CloseOtherBuffer()
let l:bufnr = bufnr()
execute "only"
for buffer in getbufinfo()
if !buffer.listed
continue
endif
if buffer.bufnr == l:bufnr
continue
else
if buffer.changed
echo buffer.name . " has changed, save first"
continue
endif
let l:cmd = "bdelete " . buffer.bufnr
execute l:cmd
endif
endfor
endfunction
let mapleader = ','
nnoremap <leader>o :call CloseOtherBuffer()<CR>
当你在目标缓冲区上并按+ o时,之前的代码将生效。它将关闭除当前缓冲区外的所有其他缓冲区。
它迭代所有缓冲区,并关闭所有不等于当前缓冲区数的缓冲区数。
其他回答
这是一个老问题,但它帮助我为我的项目获得了一些想法。为了关闭除当前使用的缓冲区外的所有缓冲区,请使用;
map <leader>o:execute "%bd\|e#"<CR>
有一个插件可以做到这一点,甚至更多!
查看close-buffers.vim
我可以很容易地做到这一点,像这样:
:%bd|e#
这样如何:
ctrl-w o
(感谢https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally)
试试这个
bufdo bd
Bufdo为所有缓冲区运行命令
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers