我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?


当前回答

这样如何:

ctrl-w o

(感谢https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally)

其他回答

我这样做

:w | %bd | e#

如果我只想打开当前缓冲区,并关闭所有其他缓冲区,这是我的最爱。

它的工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前所在的缓冲区。在Vim中,|将命令的执行链接在一起。如果你的缓冲区是最新的,上面可以缩短为:%bd |e#

我把它放在。vimrc文件中

nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>

然后你的leader + ca (close all)关闭除当前缓冲区外的所有缓冲区。

它的作用是

:w -保存当前缓冲区

%bd -关闭所有缓冲区

e# -打开上次编辑的文件

关闭未命名缓冲区

这是一个老问题,但它帮助我为我的项目获得了一些想法。为了关闭除当前使用的缓冲区外的所有缓冲区,请使用;

map <leader>o:execute "%bd\|e#"<CR>

你可以从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

我把Alejandro的评论和badteeth的评论结合起来:

command! Bonly silent execute "%bd|norm <C-O>"

范数<C-O>跳转到跳转列表中的最后一个位置,这意味着游标在%bd之前的位置。 我用silent代替了silent!这样,如果任何打开的缓冲区被修改,Vim就会打印一条错误消息,这样我就知道发生了什么。修改后的缓冲区在我的测试中保持打开状态。

无关:这是我的第500个答案!