¿Cómo salgo del editor Vim?

3767

Estoy atrapado y no puedo escapar. Dice:

"type :quit<Enter> to quit VIM"

Pero cuando escribo eso simplemente aparece en el cuerpo del objeto.

jclancy
fuente
131
¿Estás tratando de salir de VIM? Si este es el caso, presione "escape" y luego escriba ': q'
Pop
47
¡No te olvides del colon ! Debe escribir :quity luego presionar la [ENTER]tecla.
Farahmand
88
Es realmente fácil aprender los conceptos básicos de vim, y está integrado en su sistema. En terminal escriba "vimtutor". ¡25 minutos después, irás más rápido que tu editor de texto habitual!
Mark Robson el
44
Mira aquí más comandos.
Toni
78
Para evitar git commitenviarte a vim en el futuro: git config --global core.editor="nano"
Tom Kelly

Respuestas:

4906

Presione la Esctecla para ingresar al "Modo normal". Luego puede escribir :para ingresar al "Modo de línea de comandos". Aparecerán dos puntos ( :) en la parte inferior de la pantalla y puede escribir uno de los siguientes comandos. Para ejecutar un comando, presione la Entertecla.

  • :q para dejar de fumar (abreviatura de :quit)
  • :q!salir sin guardar (abreviatura de :quit!)
  • :wq escribir y dejar de fumar
  • :wq! escribir y salir incluso si el archivo solo tiene permiso de lectura (si el archivo no tiene permiso de escritura: forzar escritura)
  • :x escribir y salir (similar a :wq, pero solo escribir si hay cambios)
  • :exitescribir y salir (igual que :x)
  • :qapara dejar todo (abreviatura de :quitall)
  • :cq salir sin guardar y hacer que Vim devuelva un error distinto de cero (es decir, salir con error)

También puede salir de Vim directamente desde el "Modo normal" escribiendo ZZpara guardar y salir (igual que :x) o ZQsimplemente para salir (igual que :q!). (Tenga en cuenta que el caso es importante aquí ZZy zzno significa lo mismo).

Vim tiene una amplia ayuda, a la que puede acceder con el :helpcomando, donde puede encontrar respuestas a todas sus preguntas y un tutorial para principiantes.

dirvine
fuente
15
A menos que haya reasignado esc o tenga una asignación extraña en su .vimrc, entonces definitivamente debería. Si está en Linux, escriba xev y asegúrese de que escape sea el tipo de clave que obtiene cuando presiona escapar.
dirvine
17
Recuerde que puede usar ctrl + c si no puede usar Esc (como yo porque mi shell está en TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZpero :x! = :wq. :xescribir archivo si el archivo ha cambiado, :wqescribir archivo siempre (es decir, cuando se usa inotify).
Hauleth
36
Para ser honesto, me resulta más difícil usar el sistema de ayuda de vim que usar el propio vim, y confío principalmente en tarjetas de referencia rápida y documentación en línea.
bgvaughan
18
si no tiene permisos en el archivo pero tiene permisos de sudo:w ! sudo tee %
tvlooy
190

Las imágenes valen más que mil comandos y opciones de Unix:

Ingrese la descripción de la imagen aquí

Dibujo esto a mis alumnos cada semestre y parecen entender vi después.

vi es una máquina de estados finitos con solo tres estados.

Al comenzar, vi entra en el modo COMANDO, donde puede escribir comandos cortos de pocos caracteres, a ciegas . Sabes lo que estas haciendo; Esto no es para aficionados.

Cuando realmente desee editar texto, debe ir al modo INSERTAR con algún comando de un carácter:

  • i: vaya a INSERTAR en el lugar del cursor
  • I: ir al modo INSERT al principio de la línea
  • a: agregar después del cursor
  • A: agregar al final de la línea
  • o: abre una nueva línea debajo de la línea actual
  • O: abre una nueva línea en el lugar de la línea actual

Ahora, respondiendo a la pregunta: salir.

Puede salir de vi desde el modo EX:

  • q: si no ha realizado modificaciones o las ha guardado de antemano
  • q !: ignora cualquier modificación y sale
  • wq: guardar y salir
  • x: esto es igual a wq

wy xacepte un parámetro de nombre de archivo. Si comenzó a vi con un nombre de archivo, no necesita volver a ingresarlo aquí.

Por último, lo más importante: ¿cómo puede llegar al modo EX?

El modo EX es para comandos largos que puede ver escribiendo en la línea inferior de la pantalla. Desde el modo COMANDO, presiona dos puntos, :y aparecerá dos puntos en la línea inferior, donde puede escribir los comandos anteriores.

Desde el modo INSERTAR, debe presionar ESC, es decir, el botón Escape, ir al modo COMANDO y luego: ir al modo EX.

Si no está seguro, presione ESC y eso lo llevará al modo de comando.

Entonces, el método robusto es ESC -: - x-Enter que guarda su archivo y se cierra.

Gergely
fuente
55
Gracias, la imagen es muy útil. Sin embargo, para mí wno cambia del modo Ex al Comando, pero Escsí. ¿Qué estoy haciendo mal?
Nick Volynkin
2
Si escribe w-Enter que guarda su archivo y vuelve al modo de COMANDO. Lo escribí para tener una imagen completa de los comandos guardar y salir.
Gergely
3
oh, entonces quieres decir :w. Entonces tiene mucho sentido. Por cierto, ¿hay un comando para recargar desde el disco (es decir, para revertir los cambios pero no cerrar el archivo)? Si es así, podría estar al lado wdel diagrama.
Nick Volynkin
2
@Gergely ¡Acabo de descubrir la confusión! ¡Desde los documentos, el modo normal también se llama modo comando ! Entonces, modo de comando! = Modo de línea de comando. ¡Guauu!
jpaugh
2
@NickVolynkin el comando para recargar desde el disco es :e(o más probable :e!ya que le advertirá sobre los cambios no guardados sin el !)
JDS
177

Antes de ingresar un comando, presione la Esctecla . Después de ingresarlo, presione Returnpara confirmar.

Escfinaliza el comando actual y cambia Vim al modo normal . Ahora, si presiona :, :aparecerá en la parte inferior de la pantalla. Esto confirma que en realidad está escribiendo un comando y no está editando el archivo.

La mayoría de los comandos tienen abreviaturas, la parte opcional entre paréntesis: c[ommand].

Los comandos marcados con '*' son solo Vim (no implementado en Vi).

Safe-quit (falla si hay cambios sin guardar):

  • :q[uit] Salir de la ventana actual . Salga de Vim si esta es la última ventana. Esto falla cuando se han realizado cambios en el búfer actual .
  • :qa[ll]* Salga de todas las ventanas y Vim, a menos que haya algunos buffers que se hayan cambiado.

Preguntar-salir (pregunta si hay cambios no guardados)

  • :conf[irm] q[uit]* Salga, pero avise cuando haya algunos buffers que han sido cambiados.
  • :conf[irm] xa[ll]* Escriba todos los buffers modificados y salga de Vim. Aparece un mensaje cuando no se pueden escribir algunos buffers.

Escriba (guarde) los cambios y salga:

  • :wqEscriba el archivo actual (incluso si no se modificó) y salga. La escritura falla cuando el archivo es de solo lectura o el búfer no tiene nombre. :wqa[ll]* para todas las ventanas.
  • :wq!Lo mismo, pero escribe incluso archivos de solo lectura. :wqa[ll]!* para todas las ventanas.
  • :x[it], ZZ(con detalles ). Escriba el archivo solo si se modificó y salga, :xa[ll]* para todas las ventanas.

Descarte los cambios y salga:

  • :q[uit]! ZQ* Salga sin escribir, también cuando los buffers visibles tengan cambios. No sale cuando se cambian los buffers ocultos.
  • :qa[ll]!*, :quita[ll][!]* Salga de Vim, se pierden todos los cambios en los búferes (incluidos los ocultos).

Presione Returnpara confirmar el comando.

Esta respuesta no hace referencia a todos los comandos y argumentos de escritura y salida de Vim. De hecho, se mencionan en la documentación de Vim .

Vim tiene una amplia ayuda incorporada, escriba Esc:helpReturnpara abrirla.

Esta respuesta fue inspirada por la otra , escrita originalmente por @dirvine y editada por otros usuarios de SO. He incluido más información de la referencia de Vim, comentarios SO y algunas otras fuentes. Las diferencias para Vi y Vim también se reflejan.

Nick Volynkin
fuente
81

Si desea salir sin guardar en Vim y hacer que Vim devuelva un código de salida distinto de cero, puede usarlo :cq.

Lo uso todo el tiempo porque no me molesto en cambiar de meñique !. A menudo canalizo cosas a Vim que no necesitan guardarse en un archivo. También tenemos un contenedor SVN extraño en el trabajo que debe salir con un valor distinto de cero para abortar un registro.

Sue Spence
fuente
19
También lo uso para abortar un git commit, o visudo, o crontab, ...
Josh Lee
Anular un git commit :q!funciona bien, ya que git está buscando un mensaje no vacío y no un código de salida distinto de cero.
moopet
Sé que funciona, es solo eso: cq no requiere la tecla shift. :-)
Sue Spence
47

Esto es para el peor de los casos de salir de Vim si solo quiere salir, no tiene idea de lo que ha hecho y no le importa lo que sucederá con los archivos que abrió.

Ctrl-cEnterEnterviEnterCtrl-\Ctrl-n:qa!Enter

Esto debería sacarte la mayor parte del tiempo.

Algunos casos interesantes donde necesitas algo como esto:

  • iCtrl-ovg (ingresa al modo de inserción, luego al modo visual y luego al modo pendiente del operador)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (gracias a porges por este caso)

  • :set insertmode(este es un caso cuando Ctrl-\Ctrl-nvuelve al modo normal)


Editar: esta respuesta se corrigió debido a los casos anteriores. Solía ​​ser:

EscEscEsc:qa!Enter

Sin embargo, eso no funciona si ha ingresado al modo Ex. En ese caso, deberías hacer:

viEnter:qa!Enter

Entonces, un comando completo para "No quiero saber lo que he hecho y no quiero guardar nada, ¡solo quiero salir ahora!" sería

viEnterEscEscEsc:qa!Entrar

Heikki Naski
fuente
66
@cavalcade Este es un método extremadamente general para garantizar que el editor esté en modo normal y luego se cierre de forma segura. En uso normal, todo lo que necesita es :qo:wq
Dan Passaro
66
¡No es lo suficientemente general! ¿Qué pasa si yo (un principiante) escribí i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges
@porges gracias por el caso de prueba! También hay otros casos de prueba que demuestran que el método original fue lamentable. Edité la respuesta para que sea más general ahora.
Heikki Naski
@HeikkiNaski, al menos para mí, también necesito Enter después de Ctrl-C (para escapar del registro de expresiones)
porges
40

En caso de que necesite salir de Vim en modo fácil (mientras usa la -yopción), puede ingresar al modo normal de Vim presionando Ctrl+ Ly luego cualquiera de las opciones de salida normales funcionará.

wsams
fuente
77
Otra opción más: puede usar Ctrl+Opara salir temporalmente del modo INSERTAR y luego ingresar :q. El truco con esta combinación también es útil en vim normal para ejecutar un solo comando y volver al modo INSERTAR.
Andrey Starodubtsev
28

Vim tiene tres modos de operación: modo de entrada, modo de comando y modo Ex.

Modo de entrada : todo lo que escribe, todas las pulsaciones de teclas se repiten en la pantalla.

Modo de comando o modo de escape : todo lo que escribe en este modo se interpreta como un comando.

Modo Ex : este es otro editor, ex. Es un editor de línea. Funciona por línea o en base a un rango de líneas. En este modo, :aparece un en la parte inferior de la pantalla. Este es el ex editor.

Para salir de Vim, puede salir mientras está en modo ex o en modo comando. No puede salir de Vim cuando está en modo de entrada.

Salir del modo ex

  1. Debe asegurarse de estar en el modo Comando. Para hacer eso, simplemente presione la Esctecla.

  2. Vaya al modo ex presionando la :tecla

  3. Utilice cualquiera de las siguientes combinaciones en modo ex para salir:

    :q- salir :q!- salir sin guardar :wq- guardar y salir o escribir y salir :wq!- igual que wq, pero forzar la escritura en caso de que los permisos de los archivos sean de solo lectura :x- escribir y salir :qa- salir de todo. útil cuando se abren varios archivos como:vim abc.txt xyz.txt

Salir del modo comando

  1. Presione la tecla de escape. Probablemente ya lo haya hecho si está en modo comando.

  2. Presione mayúscula ZZ ( shift zz) - guardar y salir

  3. Presione mayúscula ZQ ( shift zq) - salga sin guardar.

Tovishalck
fuente
3
Lo que está llamando "modo ex" en realidad se llama modo de línea de comandos . Le permite ingresar comandos ex, pero con algunas diferencias importantes .
jpaugh
1
Hmm no. Estás olvidando el modo visual.
Pryftan
26

Después de presionar ESC(o cmd+ Cen mi computadora) debe presionar :para que aparezca el símbolo del sistema. Entonces, puedes ingresar quit.

Es posible que la máquina no le permita salir porque su información no se ha guardado. Si de todos modos desea dejar de fumar, ingrese !directamente después de dejar de fumar (es decir :quit!).

borrame
fuente
19

Obtuve Vim instalando un cliente Git en Windows. :qNo saldría de Vim por mí. :exithizo sin embargo ...

Bjørn van Dommelen
fuente
1
Del mismo modo, para vim haciendo git en una macintosh esto funcionó.
Joel
1
@Joel acaba de verificar esto en mi Mac, ambos comandos son legítimos ( vim -version7.3).
Nick Volynkin
2
Para Git BashWindows, a Vimveces ESCno funciona. use CTRL+ en su [lugar.
Val
@Val Eso se ve extrañamente familiar. Iirc es porque los dos hacen lo mismo. Como en ^[es lo mismo que ESC. Es interesante que Windows lo haga más complicado. Y divertido
Pryftan
10

La pregunta se ha hecho aquí .

El qcomando con un número cierra la división dada en esa posición.

:q<split position>o :<split position>qcerrará la división en esa posición.

Digamos que el diseño de la ventana de Vim es el siguiente:

-------------------------------------------------
|               |               |               |
-------------------------------------------------
|               |               |               |
|               |               |               |
|    Split 1    |    Split 2    |     Split 3   |
|               |               |               |
-------------------------------------------------

Si ejecuta el q1comando, cerrará la primera división. q2cerrará la segunda división y viceversa.

El orden de la posición dividida en el comando salir no importa. :2qo :q2cerrará la segunda división.

Si la posición de división que pasa al comando es mayor que el número de divisiones actuales, simplemente cerrará la última división.

Por ejemplo, si ejecuta la q100configuración de la ventana anterior donde solo hay tres divisiones, cerrará la última división (División 3).

Subash
fuente