在Vim中取消拆分窗口


231

我把窗户水平分开了。现在如何返回正常模式,即没有拆分窗口,只有一个窗口而不取消所有打开的窗口。我有5个,不想“退出”,只想离开拆分窗口。


7
您是否有可能接受艾克斯的答案?它比当前接受的方法有用得多
凯尔·斯特兰德

Answers:


288

Control+ w,然后单击一次q关闭每个窗口。

更新:还可以考虑对您更有用的eckes答案,:on 如果您不想一次在一个窗口中进行,则涉及(请参阅下文)。


9
我同意,但是OP并没有选择答案,我自己也无法更改。
沃伦·P

4
我很确定这是正确的答案。这为我做到了,如果您看一下op的问题,他不想关闭他的其他打开的窗口,而只是想关闭最近打开的一个窗口。
扎克2014年

1
如果显示的缓冲区包含未保存的更改,则无济于事。它说我应该用!可是我不知道 作为一个新手,我现在迷路了。
musiKk

2
所以保存。如果您不知道如何保存,则不需要此答案。您甚至可能没有权限保存。
沃伦·P

1
来自传统的GUI编辑器,这是一个非常奇怪的概念。设置hidden似乎有所帮助。不过,我的意思是,您如何添加!捷径?是“ Cw!q”,“ Cw q!”,“!Cw q”,“ C-!w q”吗?我认为这些都不是,但是我已经忘记了如何创建新的缓冲区,因此对于读者而言,这是一个练习。
musiKk

265

要关闭所有的分裂,我通常放置在窗口中的游标,应在 -ly可见一个,然后做:on这使得当前窗口 -ly可视窗口。要记住的好记忆法。


编辑: :help :on向我展示这些命令是相同的:

  • :on
  • :only
  • CTRL-w CTRL-o
  • 是的,也CTRL-W o具有相同的效果(如Nathan 回答)。

除活动窗口外,这四个窗口均关闭所有窗口。


8
+1如果另一个窗口包含任何意外更改,:on将以响应E445: Other window contains changes并且不会关闭另一个窗口。例如,我通常创建一个新窗口,并将要读取的文件读入其中。在这种情况下,Vim认为另一个窗口具有未写入的更改。在这种情况下,请使用:on!强制关闭。
Sabuncu 2013年


30

关闭当前窗口的两种选择是ZZZQ,它们分别将更改保存和不保存到显示的缓冲区。


10
这肯定是“ vim方式”,crtl + wo似乎很emacs。
安迪·海登

我不喜欢,Z因为我是德国人。((扰流板:如果您经常在DE / EN设置之间切换)键盘布局)
Tino

6

:hide命令将隐藏当前聚焦的窗口。我认为这是您正在寻找的功能。

为了在窗口之间导航,请按Ctrl + w,然后按导航键(h,j,k,l或箭头键)

有关更多信息,请运行:help window:help hide在vim中运行。


这很棒。Chrome(带有ssh插件)将<CW>捕获为“关闭选项卡”,从而有效地禁用了所有vim的<cw>窗口命令。有一个替代方案很有用。
控制

6

来自:help opening-window(搜索“关闭窗口”- /Closing a window

  • :q[uit]关闭当前窗口和缓冲区。如果是最后一个窗口,它也会退出vim
  • :bd[elete] 卸载当前缓冲区并关闭当前窗口
  • :qa[all]:quita[ll]将关闭所有缓冲区和窗口并退出vim(:qa!强制执行而不保存更改)
  • :clo[se]关闭当前窗口,但保持缓冲区打开。如果只有一个窗口,此命令将失败
  • :hid[e]隐藏当前窗口中的缓冲区(有关更多信息,请参见:help hidden
  • :on[ly] 关闭所有其他窗口,但保持所有缓冲区打开

5

我发现ctrl+ w到您要关闭的窗口,然后执行:q。这对我有用。


这实际上是重复的答案,重复了已经存在3年以上的东西。
沃伦·P

@WarrenP看起来不像是dup。我没有找到其他提到^W^W:q的可能解决方案的答案,因此摆脱了分裂。请注意,这^W to the window you want to close显然暗示着多次使用^W^W来切换到您想关闭的窗口..
Tino

我的错。另一个是^ W然后o
Warren P

2

我很了解您的意图,我也专门使用缓冲区,并且在需要时偶尔进行拆分。

以下是我的摘录 .vimrc

" disable macro, since not used in 90+% use cases
map q <Nop>
" q,  close/hide current window, or quit vim if no other window
nnoremap q :if winnr('$') > 1 \|hide\|else\|silent! exec 'q'\|endif<CR>
" qo, close all other window    -- 'o' stands for 'only'
nnoremap qo :only<CR>
set hidden
set timeout
set timeoutlen=200   " let vim wait less for your typing!

这非常适合我的工作流程

如果q被按下

  • 如果打开多个窗口,则隐藏当前窗口,否则尝试退出vim。

如果qo被按下,

  • 关闭所有其他窗口,如果只有一个窗口则不起作用。

当然,您可以将该混乱的部分包装到一个函数中,例如

func! Hide_cur_window_or_quit_vim()
    if winnr('$') > 1
        hide
    else
        silent! exec 'q'
    endif
endfunc
nnoremap q :call Hide_cur_window_or_quit_vim()<CR>

阿里纳斯:我重新映射q,因为我不使用宏编辑,而不是使用:s:g:v,和外部文本处理命令如果需要的话,例如:'{,'}!awk 'some_programm',或使用:norm! normal-command-here


1

就像其他人在执行此操作之前所说的那样,先按ctrl+ w然后o。这将“最大化”当前窗口,同时关闭其他窗口。如果您想“最大化”它,可以使用一个名为ZoomWin的插件。否则,您将不得不从头开始重新创建窗口设置。


0

好吧,我刚刚拆离并重新连接到屏幕会话,回到了我想要的正常屏幕


这不会离开vim的拆分窗口模式,而只剩下screen的拆分窗格模式-这很容易弄错,所以也许其他人也会这样做。顺便说一句,我发现此屏幕功能令人讨厌,因此我现在默认为tmux允许重新连接所有拆分的默认设置。
蒂诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.