Vim:关闭除此之外的所有缓冲区
如何关闭Vim中除当前编辑的缓冲区之外的所有缓冲区?您可以使用Vim.org中的以下脚本: 只需将其放入Vim:关闭除此之外的所有缓冲区,vim,Vim,如何关闭Vim中除当前编辑的缓冲区之外的所有缓冲区?您可以使用Vim.org中的以下脚本: 只需将其放入.vim/plugin目录,然后使用:BufOnly命令关闭除活动缓冲区外的所有缓冲区。您还可以在.vimrc中将其映射到您喜欢的其他位置 Github上的源代码(通过vim脚本镜像):注意:如评论中所述,这将关闭窗口,而不关闭缓冲区 利用 :on[ly][!] 及 如果您不关心当前的脚本,那么更简单的做法是(无需脚本): 基于胡安纳鲁伊斯的回答 在你想要保留的缓冲区中做一个小的改变,然后
.vim/plugin
目录,然后使用:BufOnly
命令关闭除活动缓冲区外的所有缓冲区。您还可以在.vimrc
中将其映射到您喜欢的其他位置
Github上的源代码(通过vim脚本镜像):注意:如评论中所述,这将关闭窗口,而不关闭缓冲区 利用
:on[ly][!]
及
如果您不关心当前的脚本,那么更简单的做法是(无需脚本):
基于胡安纳鲁伊斯的回答 在你想要保留的缓冲区中做一个小的改变,然后
:11000BD
命令bd
(缓冲区删除)不会删除任何未保存更改的缓冲区。这样,您可以将当前(更改的)文件保留在缓冲区列表中
编辑:请注意,这也将删除你的NERDTreeBuffer。你可以用:NERDTree试试这个
bufdo bd
bufdo为所有缓冲区运行命令
我这样做
:w | %bd | e#
如果我只想打开当前缓冲区并关闭所有其他缓冲区,则为我的最爱
工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前使用的缓冲区。在Vim中,|
将命令的执行链接在一起。如果您的缓冲区是最新的,则可以将上述内容缩短为:%bd | e#
如何:
ctrl-w o
(由于)关闭所有打开的缓冲区:
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
我很容易做到这一点,就像这样:
:%bd|e#
我喜欢
1100bd
(),它似乎适合我
我添加了一个退出代码>到我的映射以提供给我
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
nnoremap bd:1100BD
nnoremap bdq:1100bd:q!
这会杀死所有的缓冲区并关闭Vim,这正是我一直在寻找的。有一个插件可以做到这一点,还有更多
检查我把它放在我的.vimrc文件中
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
nnoremap ca:w%bd e#bd#
然后您的leader+ca
(全部关闭)关闭除当前缓冲区之外的所有缓冲区
它的作用是
:w-保存当前缓冲区
%bd-关闭所有缓冲区
e#-打开上次编辑的文件
bd#-关闭未命名的缓冲区。因此,我喜欢在删除所有缓冲区后保持光标位置,而上面的大多数解决方案都忽略了这一事实。我还认为重新映射命令比键入命令更好,因此在这里我使用bd
删除所有缓冲区并跳回原始光标位置
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
noremap-bd:%bd\|e\| bd\|”
%bd
=删除所有缓冲区
e#
=打开最后一个要编辑的缓冲区(我正在处理的缓冲区)
bd#
删除使用%bd
时创建的[No Name]缓冲区
中间的管道只执行一个又一个命令。您必须使用\\124;
”
=保持我的光标位置。我与:
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
命令!无提示执行“%bd | norm”
norm
跳转到跳转列表中的最后一个位置,这意味着光标位于%bd
之前的位置
- 我用了
silent
而不是silent代码>。这样,如果修改了任何打开的缓冲区,Vim将打印一条错误消息,以便我知道发生了什么。修改后的缓冲区在我的测试中保持打开状态
无关:这是我的第500个答案 这是一个老问题,但它帮助我对我的项目有了一些想法。要关闭除当前使用的缓冲区以外的所有缓冲区,请使用
map o:execute“%bd\| e |”
nnoremap x:execute“%bdelete\”编辑“normal”\“bdelete”#
- 关闭所有缓冲区(副作用会创建新的空缓冲区)
- 打开最后一个缓冲区
- 跳转到缓冲区中的最后一个编辑位置
- 删除空缓冲区
这会关闭窗口,而不是缓冲区。仍然很有用,因为人们可能会搜索错误的术语,并且会发现这一点。所以感谢你们两位。:@archgoon是的,但应该在答案中指定。我很完美,很简短!:):%bd实际上是“全部”“而是1-1000。这是否取决于要设置的set nohidden
?这是最好的答案。甚至在您想要保留多个缓冲区时也可以使用。它也将关闭nerdtree缓冲区。启用nerdtree时,我在使用此命令时遇到了一些问题。我建议使用@VoY提到的BufOnly.vim插件进行编译。我制作了以下映射,用于删除NERDTree缓冲区:nnoremap bd:%bd | NERDTree
我使用了很长时间,但现在我得到了E16:Invalid range
,因为该范围内的一些缓冲区实际上不存在。直到最近,它一直忽略这个问题。@Jon检查:ls
以查看实际打开的最大缓冲区,并将范围设置为该值(即,如果最高缓冲区为22,则:1,22bd
)。在我这么做之前,我也遇到了同样的错误。这不会关闭NERDTree缓冲区。您可能希望在执行此操作之前关闭NERDTree,以防止bd
命令关闭vim本身nnoremap c:NERDTreeClosebufdo bd
。文档警告“不得删除缓冲区或将缓冲区添加到缓冲区列表”的参数。因此,如果这个解决方案有效,它会意外地起作用……而且它通常对我不起作用(切换到不同的缓冲区)。这会为我关闭所有缓冲区,这不是问题所问的。(MacVim版本8.0.1207)此命令关闭所有缓冲区。我怎样才能保持当前的一个打开?它大部分工作正常。但有时%
不能作为所有选择器工作。你能猜到什么吗?@JinyoungKim(来自[1]):%bd“
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
command! Bonly silent execute "%bd|norm <C-O>"
nnoremap <leader>x :execute '%bdelete\|edit #\|normal `"'\|bdelete#<CR>