如何关闭Vim中除我正在编辑的缓冲区之外的所有缓冲区?
答案 0 :(得分:141)
答案 1 :(得分:79)
我能够很容易地做到这一点:
:%bd|e#
答案 2 :(得分:56)
您可以使用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
答案 3 :(得分:54)
如果你不关心当前的那个,做一些事情就更简单了(不需要脚本):
1,100bd
答案 4 :(得分:44)
我这样做
:w | %bd | e#
我最喜欢的是如果我只想让我当前的缓冲区打开并关闭所有其他缓冲区。
工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前打开的缓冲区。在Vim中,|
将命令的执行链接在一起。如果您的缓冲区是最新的,则上述内容可缩短为:%bd | e#
答案 5 :(得分:25)
以juananruiz的回答为基础。
对要保留的缓冲区进行少量更改,然后
:1,1000bd
命令bd
(缓冲区删除)不会删除任何未保存更改的缓冲区。这样,您可以将当前(已更改)文件保留在缓冲区列表中。
编辑:请注意,这也将删除您的NERDTreeBuffer。您可以通过以下方式获取:NERDTree
答案 6 :(得分:13)
使用
:on[ly][!]
和
:h only
答案 7 :(得分:7)
关闭所有打开的缓冲区:
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>
答案 8 :(得分:3)
这就是我的工作。因此,我希望在删除所有缓冲区后保持光标位置,并且上面的大多数解决方案都忽略了这一事实。我还认为重新映射命令比键入命令更好,因此在这里我使用<leader>bd
删除所有缓冲区并跳回到我的原始光标位置。
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
=删除所有缓冲区。
e#
=打开最后一个缓冲区进行编辑(我正在使用哪个缓冲区)。
bd#
删除使用%bd
时创建的[No Name]缓冲区。
之间的管道只是一个接一个地执行命令。您必须使用\|
'"
=保持光标位置。
答案 9 :(得分:2)
有一个插件可以做到这一点,还有更多!
答案 10 :(得分:1)
我将其放在我的.vimrc文件中
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
然后leader + ca
(全部关闭)关闭当前缓冲区以外的所有缓冲区。
它的作用是
:w-保存当前缓冲区
%bd-关闭所有缓冲区
e#-打开最后编辑的文件
bd#-关闭未命名的缓冲区
答案 11 :(得分:1)
所以这是一个老问题,但它帮助我为我的项目获得了一些想法。为了关闭除您当前使用的缓冲区之外的所有缓冲区,请使用;
map <leader>o :execute "%bd\|e#"<CR>
答案 12 :(得分:0)
答案 13 :(得分:0)
我喜欢1,100bd
(suggested by juananruiz),这似乎对我有用。
我在我的地图中添加了quit!
给我
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
这会杀死所有缓冲区并关闭Vim,这正是我一直在寻找的。 p>
答案 14 :(得分:0)
我将 Alejandro's comment 与 badteeth's comment 结合:
command! Bonly silent execute "%bd|norm <C-O>"
norm <C-O>
跳转到跳转列表中的最后一个位置,表示光标在 %bd
之前的位置。silent
而不是 silent!
。这样,如果任何打开的缓冲区被修改,Vim 就会打印一条错误消息,以便我知道发生了什么。修改后的缓冲区在我的测试中保持打开状态。无关:这是我的第 500 个回答!
答案 15 :(得分:0)
nnoremap <leader>x :execute '%bdelete\|edit #\|normal `"'\|bdelete#<CR>