Answers:
您可以从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
bd命令关闭vim本身。nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>。
我能够像这样很容易地做到这一点:
:%bd|e#
:%bd|e#
%bd=删除所有缓冲区。e#=打开最后一个缓冲区进行编辑。之间的管道只是一个接一个地执行命令。
%bd|e#|bd#用来删除[No Name]创建的缓冲区。
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
如果您不关心当前的脚本,则可以更简单地执行以下操作(无需脚本):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range因为该范围内的某些缓冲区实际上并不存在。直到最近,它一直在忽略它。
:ls以查看您实际上已打开的最大缓冲区,并将范围设置为该范围(即,如果最大缓冲区为22,则为:1,22bd)。在执行此操作之前,我遇到了同样的错误。
我做这个
:w | %bd | e#
我最喜欢的是我只想打开当前缓冲区并关闭所有其他缓冲区。
工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前所在的缓冲区。在Vim中,将|命令的执行链接在一起。如果您的缓冲区是最新的,则以上内容可以缩短为:%bd | e#
%不能作为所有选择器。你能猜到什么吗?
bufnr("$")返回最后一个缓冲区号。但是当我这样使用时我不知道要插值到字符串:1,bufnr("$")bd。也许..最佳解决方案是:1,9999bd。
:help :bd显示:%bdelete " delete all buffers。所以%正是您想要的。我使用您的解决方案的变体::%bd<CR><C-O>:bd#<CR>这将删除所有缓冲区,然后用于<C-O>恢复当前文件中的位置,然后:bd#删除未修饰的缓冲区。这将关闭所有缓冲区,并将您留在文件中的相同位置。
建立在juananruiz的答案上。
在要保留的缓冲区中进行一些小的更改,然后
:1,1000bd
该命令bd(缓冲区删除)将不会删除任何未保存更改的缓冲区。这样,您可以将当前(更改的)文件保留在缓冲区列表中。
编辑:请注意,这还将删除您的NERDTreeBuffer。你可以用:NERDTree找回来
set nohidden设置?
关闭所有打开的缓冲区:
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并使用调用它:call CloseAllBuffersButCurrent()。
便捷地图:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
有一个插件可以做到这一点,还有更多!
我喜欢1,100bd(juananruiz建议)似乎对我有用。
我quit!在映射中添加了一个
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
这会杀死所有缓冲区并关闭Vim,这正是我一直在寻找的东西。
bdq关闭所有缓冲区并退出vim 的映射,:q!而只能使用:qa!。除非我忽略了什么