Cancel split window in Vim

前端 未结 10 1147
小鲜肉
小鲜肉 2021-01-29 18:07

I have split my windows horizontally. Now how can I return to normal mode, i.e. no split window just one window without cancelling all of my open windows. I have 5 and do not wa

相关标签:
10条回答
  • 2021-01-29 18:14

    The command :hide will hide the currently focused window. I think this is the functionality you are looking for.

    In order to navigate between windows type Ctrl+w followed by a navigation key (h,j,k,l, or arrow keys)

    For more information run :help window and :help hide in vim.

    0 讨论(0)
  • 2021-01-29 18:20

    Press Control+w, then hit q to close each window at a time.

    Update: Also consider eckes answer which may be more useful to you, involving :on (read below) if you don't want to do it one window at a time.

    0 讨论(0)
  • 2021-01-29 18:23

    To close all splits, I usually place the cursor in the window that shall be the on-ly visible one and then do :on which makes the current window the on-ly visible window. Nice mnemonic to remember.


    Edit: :help :on showed me that these commands are the same:

    • :on
    • :only
    • CTRL-w CTRL-o
    • And yes, also CTRL-W o has the same effect (as Nathan answered).

    Each of these four closes all windows except the active one.

    0 讨论(0)
  • 2021-01-29 18:25

    Just like the others said before the way to do this is to press ctrl+w and then o. This will "maximize" the current window, while closing the others. If you'd like to be able to "unmaximize" it, there's a plugin called ZoomWin for that. Otherwise you'd have to recreate the window setup from scratch.

    0 讨论(0)
  • 2021-01-29 18:33

    to close all windows but the current one use:

    CTRL+w, o

    That is, first CTRL+w and then o.

    0 讨论(0)
  • 2021-01-29 18:35

    I understand you intention well, I use buffers exclusively too, and occasionally do split if needed.

    below is excerpt of my .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!
    

    Which fits my workflow quite well

    If q was pressed

    • hide current window if multiple window open, else try to quit vim.

    if qo was pressed,

    • close all other window, no effect if only one window.

    Of course, you can wrap that messy part into a function, eg

    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>
    

    Sidenote: I remap q, since I do not use macro for editing, instead use :s, :g, :v, and external text processing command if needed, eg, :'{,'}!awk 'some_programm', or use :norm! normal-command-here.

    0 讨论(0)
提交回复
热议问题