我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?
当前回答
试试这个
bufdo bd
Bufdo为所有缓冲区运行命令
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
其他回答
我是这么做的。所以我喜欢在删除所有缓冲区后保持光标的位置,上面的大多数解决方案都忽略了这个事实。我还认为重新映射命令比键入它更好,所以在这里我使用<leader>bd删除所有缓冲区,并跳回我原来的光标位置。
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd =删除所有缓冲区。
e# =打开最后一个缓冲区进行编辑(这是我正在工作的缓冲区)。
删除使用%bd时创建的[No Name]缓冲区。
中间的管道只是执行一个又一个命令。你必须使用\|来转义它
'" =保持我的光标位置。
有一个插件可以做到这一点,甚至更多!
查看close-buffers.vim
基于juanruiz的回答。
然后,在想要保留的缓冲区中做一个小更改
: 1、1000双相障碍
命令bd(缓冲区删除)将不会删除任何未保存更改的缓冲区。通过这种方式,您可以将当前(已更改的)文件保存在缓冲列表中。
编辑:请注意,这也会删除你的NERDTreeBuffer。你可以用NERDTree把它找回来
这样如何:
ctrl-w o
(感谢https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally)
关闭所有打开的缓冲区:
silent! execute "1,".bufnr("$")."bd"
关闭除当前缓冲区外的所有打开缓冲区:
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并使用以下方法调用:
方便的地图:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>