Vim关闭缓冲区但不拆分窗口
如果我有两个水平/垂直分割的缓冲区,并想关闭其中一个,但我不想关闭窗口。我想保持分割窗口的位置与关闭缓冲区之前相同Vim关闭缓冲区但不拆分窗口,vim,buffer,Vim,Buffer,如果我有两个水平/垂直分割的缓冲区,并想关闭其中一个,但我不想关闭窗口。我想保持分割窗口的位置与关闭缓冲区之前相同 如果我按:bd,关闭缓冲区的窗口也会关闭。要删除缓冲区但保留拆分吗?你需要一个新的缓冲区-:new会为你做这件事,为一个新的/空的文件创建一个缓冲区,但是你仍然需要删除旧的缓冲区/窗口。在vim中,窗口是缓冲区上的一个视口,因此如果您想要一个空窗口,您需要一个空缓冲区。我必须检查我的工作计算机,但我认为我用于此的脚本是。在vim中不可能有空窗口,但是您可以在当前窗口中使用:enew
如果我按:bd,关闭缓冲区的窗口也会关闭。要删除缓冲区但保留拆分吗?你需要一个新的缓冲区-:new会为你做这件事,为一个新的/空的文件创建一个缓冲区,但是你仍然需要删除旧的缓冲区/窗口。在vim中,窗口是缓冲区上的一个视口,因此如果您想要一个空窗口,您需要一个空缓冲区。我必须检查我的工作计算机,但我认为我用于此的脚本是。在vim中不可能有空窗口,但是您可以在当前窗口中使用
:enew
像@RusAlex一样创建一个新的空文件,我不喜欢插件。我还想知道我输入的代码实际上做了什么
nmap,d:b#bd#
简而言之这将向vim的正常模式添加一个按键映射,等待按键序列,d
。执行此操作时,将切换到以前打开的缓冲区,并尝试删除您切换离开的缓冲区
删除屏幕外缓冲区将保持屏幕分割不变
该命令由三个空格分隔的部分组成:
-添加/更改正常模式的键映射nmap
-要响应的按键顺序;首先是,d
(逗号),然后是,
d
-要执行的按键顺序:b#bd#
-将vim切换到模式命令行:
-将窗口切换到以前打开的缓冲区b#
-预期后续命令;表示
(管道字符);用于链接命令|
-删除以前打开的缓冲区,即刚从bd#
-执行命令;表示回车,基本上是键
或return
Enter
~/.vimrc
。如果要从vim中添加映射,请预先添加:
(冒号)-退出vim时映射将丢失:
:nmap,d:b#bd#
当您打开vim时,它通常处于正常模式,而不是插入模式(在按下i
后在屏幕底部通过--insert--
指示)、视觉等。nmap
中的n
指定仅添加到正常模式的键映射。查找有关映射的详细信息
重要注意事项:
将切换到当前缓冲区(如果它是唯一已知的缓冲区)b#
可以切换到隐藏/关闭的缓冲区,例如您刚才按b#
关闭的缓冲区,d
将关闭当前缓冲区,如果它是唯一已知的缓冲区,将释放屏幕上留下的空缓冲区bd#
- 如果从中切换的缓冲区是隐藏/关闭的缓冲区,
将失败bd#
- 如果在切换另一个窗口后显示要关闭缓冲区,
仍将取消闪烁bd#
将所有窗口切换到以前打开的缓冲区。不确定如何与:windo b#
组合李>bd
可以省略,在这种情况下,您必须手动按
或返回
执行输入
显示所有以:nmap,
开头的正常模式映射,
列出打开的缓冲区:ls
- 以下是一些解决方法:
function! CloseSplitOrDeleteBuffer()
let curNr = winnr()
let curBuf = bufnr('%')
wincmd w " try to move on next split
if winnr() == curNr " there is no split"
exe 'bdelete'
elseif curBuf != bufnr('%') " there is split with another buffer
wincmd W " move back"
exe 'bdelete'
else " there is split with same buffer"
wincmd W
wincmd c
endif
endfunction
nnoremap <silent> Q :call CloseSplitOrDeleteBuffer()<CR>
函数!CloseSplitOrDeleteBuffer()
设curNr=winnr()
设curBuf=bufnr(“%”)
wincmd w“尝试下一次拆分
如果winnr()==curNr“没有拆分”
exe'b删除'
elseif curBuf!=bufnr(“%”)“存在与另一个缓冲区的拆分
wincmd W“向后移动”
exe'b删除'
否则“存在使用相同缓冲区的拆分”
wincmd W
wincmd c
恩迪夫
端功能
nnoremap Q:callclosesplitordeletebuffer()调用
@RusAlex version+如果删除缓冲区两次,最终需要激活当前缓冲区
nmap ,d :b#<bar>bd#<bar>b<CR>
nmap,d:b#bd#b
以下是@zenbro提供的答案的一个变体,即使您关闭的缓冲区是最后一个,它也会保持所有(拆分)窗口和选项卡打开
该函数可将指向当前缓冲区(正在关闭)的所有窗口切换到下一个缓冲区(如果当前缓冲区是最后一个缓冲区,则切换到新的缓冲区)
要绘制地图,请执行以下操作:
map <silent> <F4> :call CloseBuffer()<cr>
map:callclosebuffer()
不喜欢插件。希望在vim内部找到解决方案。我有一个最少数量的a插件,在那里我也找到了我需要的:nmap,d:b#bd#Rus,我相信你应该回答你自己的帖子,然后选择正确。不管怎样,你的命令:b#bd#也正是我想要的。谢谢你的发帖@DmytriiNagirniak用于在.vimrc中“键入”管道字符。管道角色允许您在一行上执行两个命令:@RusAles.com。这么简单,但这么有效。让我觉得很遗憾我自己没有想到这一点!;)谢谢。可能是第二份
map <silent> <F4> :call CloseBuffer()<cr>