我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?
当前回答
这样如何:
ctrl-w o
(感谢https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally)
其他回答
我把它放在。vimrc文件中
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
然后你的leader + ca (close all)关闭除当前缓冲区外的所有缓冲区。
它的作用是
:w -保存当前缓冲区
%bd -关闭所有缓冲区
e# -打开上次编辑的文件
关闭未命名缓冲区
注意:正如注释中提到的,这会关闭窗口而不是缓冲区。
通过使用
:on[ly][!]
and
:h only
我把Alejandro的评论和badteeth的评论结合起来:
command! Bonly silent execute "%bd|norm <C-O>"
范数<C-O>跳转到跳转列表中的最后一个位置,这意味着游标在%bd之前的位置。 我用silent代替了silent!这样,如果任何打开的缓冲区被修改,Vim就会打印一条错误消息,这样我就知道发生了什么。修改后的缓冲区在我的测试中保持打开状态。
无关:这是我的第500个答案!
你可以从vim.org上使用这个脚本:
http://www.vim.org/scripts/script.php?script_id=1071
只要把它放到你的。vim/plugin目录下,然后使用:BufOnly命令关闭所有的缓冲区,但激活的缓冲区除外。您还可以在.vimrc中将它映射到您喜欢的其他地方。
来源Github(通过vim-scripts镜像):https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
关闭所有打开的缓冲区:
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>