我怎么能关闭所有缓冲区在Vim除了一个我目前正在编辑?
当前回答
我这样做
:w | %bd | e#
如果我只想打开当前缓冲区,并关闭所有其他缓冲区,这是我的最爱。
它的工作原理:首先写入当前缓冲区的更改,然后关闭所有打开的缓冲区,然后重新打开我当前所在的缓冲区。在Vim中,|将命令的执行链接在一起。如果你的缓冲区是最新的,上面可以缩短为:%bd |e#
其他回答
我是这么做的。所以我喜欢在删除所有缓冲区后保持光标的位置,上面的大多数解决方案都忽略了这个事实。我还认为重新映射命令比键入它更好,所以在这里我使用<leader>bd删除所有缓冲区,并跳回我原来的光标位置。
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd =删除所有缓冲区。
e# =打开最后一个缓冲区进行编辑(这是我正在工作的缓冲区)。
删除使用%bd时创建的[No Name]缓冲区。
中间的管道只是执行一个又一个命令。你必须使用\|来转义它
'" =保持我的光标位置。
如果你不关心当前的,更简单的做法是(不需要脚本):
1,100bd
票数最高的答案将重新打开缓冲区,它将失去我们正在工作的当前行。 关闭然后重新打开将导致屏幕刷新
function! CloseOtherBuffer()
let l:bufnr = bufnr()
execute "only"
for buffer in getbufinfo()
if !buffer.listed
continue
endif
if buffer.bufnr == l:bufnr
continue
else
if buffer.changed
echo buffer.name . " has changed, save first"
continue
endif
let l:cmd = "bdelete " . buffer.bufnr
execute l:cmd
endif
endfor
endfunction
let mapleader = ','
nnoremap <leader>o :call CloseOtherBuffer()<CR>
当你在目标缓冲区上并按+ o时,之前的代码将生效。它将关闭除当前缓冲区外的所有其他缓冲区。
它迭代所有缓冲区,并关闭所有不等于当前缓冲区数的缓冲区数。
:%bd then Ctrl-o
:%bd删除所有缓冲区
按Ctrl-o跳转回最后一个缓冲区,即您所引用的“This One”。
注意:正如注释中提到的,这会关闭窗口而不是缓冲区。
通过使用
:on[ly][!]
and
:h only
推荐文章
- 如何回到行之前编辑的最后一个在Vim?
- 如何跳转到一个特定的人物在vim?
- 如何删除一个大的文本块而不计算行?
- 在Vim/Vi中,如何将光标移动到前一个单词的末尾?
- 如何在vim中自动删除尾随空格
- 为什么Vim使用~扩展名保存文件?
- 如何在Vim或Linux中将空格转换为制表符?
- 我如何使用vimdiff来解决git合并冲突?
- 在Vim中删除当前缓冲区的文件名/路径
- Git在终端提交时打开VIM,但无法返回终端
- 请参阅编辑器中的换行符和回车
- 如何在NERDTree中显示隐藏文件(以句点开始)?
- 如何复制一个选择到OS X剪贴板
- 如何删除(不削减)在Vim?
- Vim:在可视模式下快速选择文本块的方法