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!
。除非我忽略了什么