【问题标题】:Cancel split window in Vim在 Vim 中取消拆分窗口
【发布时间】:2011-06-16 03:13:46
【问题描述】:

我已经水平拆分了我的窗口。现在我怎样才能回到正常模式,即没有拆分窗口只有一个窗口,而不会取消我所有打开的窗口。我有 5 个,不想“退出”,只想离开拆分窗口。

【问题讨论】:

  • 你能接受埃克斯的回答吗?它比当前接受的要有用得多...

标签: vim split window


【解决方案1】:

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

更新:如果您不想一次只看一个窗口,还可以考虑 eckes 答案,这可能对您更有用,涉及 :on(请阅读下文)。

【讨论】:

  • 我同意,但 OP 没有选择 eckes 的答案,我自己也无法更改。
  • 我很确定这是正确的答案。这是为我做的,如果你看 op 的问题,他不想关闭其他打开的窗口,只是最近拆分的一个。
  • 如果显示的缓冲区包含未保存的更改,则无济于事。它说我应该用 !但我不知道怎么做。作为一个新手,我现在迷路了。
  • 所以保存它。如果您不知道如何保存,则不需要此答案。有可能你甚至没有 PERMISSION 来保存。
  • 如果缓冲区包含未保存的更改,您可以使用 :q! 退出。意思是,“我想退出这个!真的!”
【解决方案2】:

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


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

  • :on
  • :only
  • CTRL-w CTRL-o
  • 是的,CTRL-W o 也有同样的效果(如Nathananswered)。

这四个中的每一个都会关闭除活动窗口之外的所有窗口。

【讨论】:

  • +1 如果另一个窗口包含任何意外更改,:on 将回复 E445: Other window contains changes,并且不会关闭另一个窗口。例如,我通常会创建一个新窗口,并将我想从中提取的文件读入其中。在这种情况下,Vim 认为另一个窗口有未写入的更改。在这种情况下,请使用:on! 强制关闭。
【解决方案3】:

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

CTRL+w, o

即先CTRL+wo

【讨论】:

【解决方案4】:

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

【讨论】:

  • 这肯定是“vim方式”,crtl+w o 好像是emacs。
  • 我不喜欢Z,因为我是德国人。 (剧透:如果您经常在 DE/EN 设置之间切换,则键盘布局)
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

    要在窗口之间导航,请键入 Ctrl+w 后跟导航键(h、j、k、l 或箭头键)

    如需更多信息,请在 vim 中运行 :help window:help hide

    【讨论】:

    • 这很棒。 Chrome(带有 ssh 插件)将 捕获为“关闭选项卡”,从而有效地禁用了所有 vim 的 窗口命令。有替代方案很有用。
    【解决方案7】:

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

    【讨论】:

    • 这真的是一个重复的答案,重复了已经坐在那里 3 年多的东西。
    • @WarrenP 看起来不像是一个骗子。我没有找到任何其他提到^W^W:q 作为可能的解决方案的答案,所以摆脱分裂。请注意,^W to the window you want to close 显然意味着多次使用^W^W 来切换到您要关闭的窗口..
    • 我的错。另一个是 ^W 然后 o
    【解决方案8】:

    我很理解你的意图,我也专门使用缓冲区,如果需要偶尔会拆分。

    以下是我.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

    【讨论】:

      【解决方案9】:

      就像其他人之前所说的那样,按ctrl+w然后按o。这将“最大化”当前窗口,同时关闭其他窗口。如果您希望能够“取消最大化”它,可以使用一个名为 ZoomWin 的插件。否则,您必须从头开始重新创建窗口设置。

      【讨论】:

        【解决方案10】:

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

        【讨论】:

        • 这不会离开vim 的拆分窗口模式,这只会离开screen 的拆分窗格模式——这很容易被误会,所以也许其他人也会这样做。顺便说一句,我觉得这个屏幕功能很烦人,因此我现在默认为tmux,它允许重新连接所有拆分都完好无损。
        【解决方案11】:

        提供窗口编号以关闭特定窗口而不离开当前窗口:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-18
          • 2012-03-17
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 2014-05-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多