Cancelar ventana dividida en Vim

231

He dividido mis ventanas horizontalmente. Ahora, ¿cómo puedo volver al modo normal, es decir, sin ventana dividida, solo una ventana sin cancelar todas mis ventanas abiertas? Tengo 5 y no quiero "salir", solo quiero salir de la ventana dividida.

Profundo
fuente
77
¿Alguna posibilidad de que aceptes la respuesta de Eckes? Es mucho más útil que el actualmente aceptado ...
Kyle Strand

Respuestas:

288

Presione Control+ w, luego presione qpara cerrar cada ventana a la vez.

Actualización : También considere la respuesta de eckes, que puede ser más útil para usted, que involucra :on (lea a continuación) si no desea hacerlo una ventana a la vez.

Warren P
fuente
99
Estoy de acuerdo, pero el OP no seleccionó la respuesta, y no puedo cambiarlo yo mismo.
Warren P
44
Estoy bastante seguro de que esta es la respuesta correcta. Esto lo hizo por mí y si nos fijamos en la pregunta de op, él no quería cerrar sus otras ventanas abiertas, solo la recientemente dividida.
Zak
1
No ayuda si el búfer mostrado contiene cambios sin guardar. ¡Dice que debería anular con! Pero no sé cómo. Como novato estoy perdido ahora.
musiKk
2
así que guárdalo. No necesita esta respuesta si no sabe cómo guardar. Es posible que ni siquiera tenga PERMISO para guardar.
Warren P
1
Viniendo de los editores tradicionales de GUI, este es un concepto bastante extraño. Sin hiddenembargo, la configuración parece ayudar. Sin embargo, lo que quise decir fue, ¿cómo agregas un! a un atajo? ¿Es "Cw! Q", "Cw q!", "! Cw q", "C-! W q"? Creo que ninguno de ellos, pero ya olvidé cómo crear nuevos buffers, así que este es un ejercicio para el lector.
musiKk
265

Para cerrar todas las divisiones, por lo general coloca el cursor en la ventana que será el de uno-mente visible y luego hacer :onlo que hace que la ventana actual del de la ventana-mente visible. Bonito mnemónico para recordar.


Editar: :help :on me mostró que estos comandos son los mismos:

  • :on
  • :only
  • CTRL-w CTRL-o
  • Y sí, también CTRL-W otiene el mismo efecto (como respondió Nathan ).

Cada uno de estos cuatro cierra todas las ventanas excepto la activa.

Eckes
fuente
8
+1 Si la otra ventana contiene cambios no deseados, :onresponderá con E445: Other window contains changesy no cerrará la otra ventana. Por ejemplo, generalmente creo una nueva ventana y leo un archivo desde el que me gustaría tirar. En este caso, Vim considera que la otra ventana tiene cambios no escritos. En tal caso, use :on!para forzar un cierre.
Sabuncu
61

para cerrar todas las ventanas pero la actual usa:

CTRL+ w,o

Es decir, primero CTRL+ wy luego o.

Nathan Fellman
fuente
3
También me pregunto si hay una manera de deshacer un CTRL+W otipeado accidentalmente.
Paolo
30

Dos alternativas para cerrar la ventana actual son ZZy ZQ, que guardarán y no guardarán, respectivamente, los cambios en el búfer mostrado.

Benoit
fuente
10
Esta es seguramente la "forma vim", crtl + wo parece tan emacs.
Andy Hayden
No me gusta Zporque soy alemán. (Spoiler: distribución del teclado si cambia frecuentemente entre la configuración DE / EN)
Tino
6

El comando: hide ocultará la ventana actualmente enfocada. Creo que esta es la funcionalidad que estás buscando.

Para navegar entre ventanas, escriba Ctrl + w seguido de una tecla de navegación (h, j, k, l o teclas de flecha)

Para más información ejecutar :help windowy :help hideen vim.

Cledoux
fuente
Esto es genial. Chrome (con el complemento ssh) atrapa <CW> como "pestaña de cierre" deshabilitando efectivamente todos los comandos de ventana <cw> de vim. Tener una alternativa es útil.
rienda
6

De :help opening-window(busque "Cerrar una ventana" - /Closing a window)

  • :q[uit]cierre la ventana actual y el búfer. Si es la última ventana, también saldrá de vim
  • :bd[elete] descargar el búfer actual y cerrar la ventana actual
  • :qa[all]o :quita[ll]cerrará todos los búferes y ventanas y saldrá de vim ( :qa!para forzar sin guardar los cambios)
  • :clo[se]cierre la ventana actual pero mantenga abierto el búfer. Si solo hay una ventana, este comando falla
  • :hid[e]ocultar el búfer en la ventana actual (Lea más en :help hidden)
  • :on[ly] cierre todas las demás ventanas pero deje todas las memorias intermedias abiertas
chaptuck
fuente
5

Encontré que ctrl+ wa la ventana que quieres cerrar, luego solo hazlo :q. Esto funciona para mi.

dmarges
fuente
Esta es una respuesta duplicada realmente, duplicada de algo que ha estado allí por más de 3 años.
Warren P
@WarrenP no parece un dup. No encontré ninguna otra respuesta que mencione ^W^W:qcomo una posible solución, así que deshazte de una división. Tenga en cuenta que ^W to the window you want to closeaparentemente implica múltiples usos ^W^Wpara cambiar a la ventana que desea cerrar ..
Tino
Culpa mía. El otro es ^ W luego o
Warren P
2

Entiendo bien tu intención, yo también uso tampones exclusivamente, y ocasionalmente me separo si es necesario.

a continuación es un extracto de mi .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!

Que se adapta bastante bien a mi flujo de trabajo

Si qfue presionado

  • ocultar la ventana actual si hay varias ventanas abiertas, de lo contrario, intente salir de vim.

si qofue presionado,

  • cierre todas las demás ventanas, sin efecto si solo hay una ventana.

Por supuesto, puede envolver esa parte desordenada en una función , por ejemplo

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>

Nota al margen : Yo de reasignación q, ya que no utiliza macro para la edición, en lugar de utilizar :s, :g, :v, y el comando externo de procesamiento de texto si es necesario, por ejemplo, :'{,'}!awk 'some_programm'o el uso :norm! normal-command-here.

qeatzy
fuente
1

Al igual que los otros dijeron antes, la forma de hacer esto es presionar ctrl+ wy luego o. Esto "maximizará" la ventana actual, mientras cierra las demás. Si desea poder "desmaximizarlo", hay un complemento llamado ZoomWin para eso. De lo contrario, tendría que recrear la configuración de la ventana desde cero.

psyho
fuente
0

Bien, simplemente me desconecté y volví a conectar a la sesión de pantalla y volví a la pantalla normal que quería

Profundo
fuente
Esto no deja vimel modo de ventana dividida, solo deja screenel modo de panel dividido, que puede confundirse fácilmente, por lo que quizás otros también lo hagan. Por cierto, encuentro esta característica de la pantalla molesta, por lo tanto, ahora tengo el valor predeterminado tmuxque permite una nueva conexión con todas las divisiones intactas.
Tino