Vim的多层视图(Windows,Buffers和Tabs)让我有些困惑.假设我拆分显示(:sp)然后选择一个不同的缓冲区来显示在每个窗口中.现在我想关闭其中一个缓冲区,但我不希望窗口关闭(关闭后它可以显示列表中的下一个缓冲区或空缓冲区,这没关系).我怎样才能做到这一点?
谢谢.
Jon*_*aun 127
我搞砸了一下,最后提出来:
:bp | sp | bn | bd
Run Code Online (Sandbox Code Playgroud)
这是键映射的复制/粘贴版本:
:bp<bar>sp<bar>bn<bar>bd<CR>
Run Code Online (Sandbox Code Playgroud)
我已经对它进行了一些测试,它在各种条件下都能正常工作.在最后一个缓冲区上使用时,它将为您留下一个新的空白缓冲区.
把这个放在你的.vimrc中:
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
Run Code Online (Sandbox Code Playgroud)
重新启动Vim,或只是:source ~/.vimrc让更改生效.下次要关闭缓冲区时,只需键入:( \q如果\是您的领导键)
val*_*lid 37
我今天搜索了这个并想出了
:b#|bd#
它将当前窗口更改为先前打开的缓冲区,并删除/隐藏刚刚切换的缓冲区.
这需要至少两个已知的缓冲区.
如果另一个窗口但当前显示相同的缓冲区,这仍然会破坏分裂.您可以将所有窗口更改为先前打开的缓冲区
:windo b#
我在回答类似问题的过程中添加了更多关于前命令的详细信息,讨论了它的映射(以及一些陷阱).
ggu*_*son 12
nmap <leader>d :bprevious<CR>:bdelete #<CR>
Run Code Online (Sandbox Code Playgroud)
在几个窗口中打开一个缓冲区之前,它应该正常工作.除非你想在那里使用更大的脚本,否则它足够好.
编辑:这就是我现在使用的:
function! BufferDelete()
if &modified
echohl ErrorMsg
echomsg "No write since last change. Not closing buffer."
echohl NONE
else
let s:total_nr_buffers = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
if s:total_nr_buffers == 1
bdelete
echo "Buffer deleted. Created new buffer."
else
bprevious
bdelete #
echo "Buffer deleted."
endif
endif
endfunction
Run Code Online (Sandbox Code Playgroud)
我想这就是你要找的东西
http://www.vim.org/htmldoc/windows.html#window-moving
试试这个:
查看你的缓冲区ID
:buffers
Run Code Online (Sandbox Code Playgroud)
你会看到那里的缓冲区列表
1 a.cpp
2 b.py
3 c.php
Run Code Online (Sandbox Code Playgroud)
如果你想从缓冲区中删除b.py
:2bw
Run Code Online (Sandbox Code Playgroud)
如果要从缓冲区中删除/关闭所有内容
:1,3bw
Run Code Online (Sandbox Code Playgroud)
小智 6
我个人使用的一个简单版本是
:bp|bd#
Run Code Online (Sandbox Code Playgroud)
它转到前一个缓冲区并删除另一个缓冲区(这实际上是我们跳转的原始缓冲区)。这在 99% 的情况下都能满足您的期望,无需任何复杂的脚本。
作为键盘快捷键,我使用以下命令
nnoremap <silent> <Leader>c :bp<BAR>bd#<CR>
Run Code Online (Sandbox Code Playgroud)
对于那些使用NERDTree的人。
我使用此插件https://github.com/jistr/vim-nerdtree-tabs修复了此问题,现在我可以关闭唯一的buff / file / tab,而无需关闭窗口。
在安装完上面的插件之后,将以下代码放在我的.vimrc上:
let g:nerdtree_tabs_autoclose=0
Run Code Online (Sandbox Code Playgroud)
上面的变量的描述是:如果其中只有一个窗口并且是NERDTree(默认值为1),则关闭当前选项卡
此处更多信息:https : //github.com/jistr/vim-nerdtree-tabs#configuration