取消Vim中的分割窗口

我把窗户横着分开了。现在我如何回到正常模式,即没有分裂窗口,只有一个窗口,而不取消所有打开的窗口。我有5个,并不想“退出”,只是想从分裂的窗口出去。

141492 次浏览

控制+w,然后按一次关闭每个窗口。

更新:也考虑eckes的答案,这可能对你更有用,涉及:on(阅读下面),如果你不想一次一个窗口做它。

好的,我只是分离并重新连接到屏幕会话,我回到了我想要的正常屏幕

命令:hide将隐藏当前聚焦的窗口。我认为这就是你想要的功能。

为了在窗口之间导航,键入Ctrl+w后跟一个导航键(h,j,k,l或方向键)

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

关闭当前窗口的两个替代方法是ZZZQ,它们将分别保存和不保存对显示缓冲区的更改。

关闭除当前窗口外的所有窗口:

CTRL + w o

也就是说,首先CTRL+w,然后o

要关闭所有分割,我通常将光标放在-ly可见的窗口中,然后执行:on,使当前窗口成为-ly可见窗口。很好的助记方法。


编辑: :help :on告诉我这些命令是相同的:

  • :on
  • :only
  • CTRL-w CTRL-o
  • 是的,CTRL-W o也具有相同的效果(与内森 回答一样)。

这四个选项都会关闭除活动窗口外的所有窗口。

就像之前说的那样,这样做的方法是按ctrl+w,然后按o。这将“最大化”当前窗口,同时关闭其他窗口。如果你希望能够“非最大化”它,有一个名为ZoomWin的插件。否则,您必须从头重新创建窗口设置。

我发现ctrl + w到你想关闭的窗口,然后只做:问。这对我很有用。

我很好地理解了你的意图,我也专门使用缓冲区,如果需要,偶尔也会进行分割。

下面是我的.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>
< p > 旁注: 我重新映射q,因为我不使用宏进行编辑,而是使用:s:g:v,和外部文本处理命令,如果需要,例如,:'{,'}!awk 'some_programm',或使用:norm! normal-command-here

: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]关闭所有其他窗口,但保留所有缓冲区打开

提供窗口号以关闭特定窗口而不保留当前窗口:

:[N]close
:close[N]
:[N]quit
:quit[N]
Ctrl-W[N]c

窗口号可以通过以下设置显示在状态行中:

:set statusline+=%{tabpagewinnr(tabpagenr())}