我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?
当前回答
我是这么做的。所以我喜欢在删除所有缓冲区后保持光标的位置,上面的大多数解决方案都忽略了这个事实。我还认为重新映射命令比键入它更好,所以在这里我使用<leader>bd删除所有缓冲区,并跳回我原来的光标位置。
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd =删除所有缓冲区。
e# =打开最后一个缓冲区进行编辑(这是我正在工作的缓冲区)。
删除使用%bd时创建的[No Name]缓冲区。
中间的管道只是执行一个又一个命令。你必须使用\|来转义它
'" =保持我的光标位置。
其他回答
我把Alejandro的评论和badteeth的评论结合起来:
command! Bonly silent execute "%bd|norm <C-O>"
范数<C-O>跳转到跳转列表中的最后一个位置,这意味着游标在%bd之前的位置。 我用silent代替了silent!这样,如果任何打开的缓冲区被修改,Vim就会打印一条错误消息,这样我就知道发生了什么。修改后的缓冲区在我的测试中保持打开状态。
无关:这是我的第500个答案!
这是一个老问题,但它帮助我为我的项目获得了一些想法。为了关闭除当前使用的缓冲区外的所有缓冲区,请使用;
map <leader>o:execute "%bd\|e#"<CR>
我喜欢1100bd (juananruiz建议),这似乎对我有用。
我添加了一个退出!我的地图给我
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
这会杀死所有缓冲区并关闭Vim,这正是我最想要的。
基于juanruiz的回答。
然后,在想要保留的缓冲区中做一个小更改
: 1、1000双相障碍
命令bd(缓冲区删除)将不会删除任何未保存更改的缓冲区。通过这种方式,您可以将当前(已更改的)文件保存在缓冲列表中。
编辑:请注意,这也会删除你的NERDTreeBuffer。你可以用NERDTree把它找回来
我这样做
:w | %bd | e#
如果我只想打开当前缓冲区,并关闭所有其他缓冲区,这是我的最爱。
它的工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前所在的缓冲区。在Vim中,|将命令的执行链接在一起。如果你的缓冲区是最新的,上面可以缩短为:%bd |e#