Salir de vim más rápido

124

Uso Vim principalmente para ediciones rápidas en lugar de largas sesiones de trabajo. En ese sentido, creo que la secuencia de teclas para dejar de fumar, especialmente laboriosa: Esc, Shift+ ;, w, q, Enter.

¿Cómo salir de Vim (posiblemente guardando el documento) con la menor cantidad de pulsaciones de teclas? Especialmente desde el modo Insertar.

vemv
fuente
50
El botón de encendido está a solo un clic de distancia, ya sabes.
Renan
2
@jasonwryan tiene razón: ZZ es bastante rápido si está en modo comando, pero la comparación no es del todo correcta. Su secuencia de teclas supone que está en modo de inserción. Para salir del modo de inserción, Ctrl- [es más rápido que Esc. Shift-: es una pulsación de tecla, no puede escribir: más rápido por sí solo. Entonces ahorras algo, pero no mucho.
Dominic Cronin
2
No debe usar Escpara salir del modo de inserción, ya que la Esctecla está lejos de las demás en los teclados modernos. Use Ctrl+ ]o cree su propio mapeo.
void-pointer el
3
Obtenga un teclado francés: puede eliminar el cambio.
Rico
1
puntero vacío, ¿no funciona Ctrl + C en lugar de Ctrl + [como sustituto de Esc?
zumalifeguard

Respuestas:

154

Shiftzz en modo comando guarda el archivo y sale.

jasonwryan
fuente
44
¿Esto necesita absolutamente Shift o es simplemente Z Z(mayúscula)? Además, ¿no necesita estar en modo de comando para que funcione, lo que lo haría Esc Z Z?
un CVn
35
Además, ESC Z Qpara salir sin guardar
Carlos Campderrós
Strg + zz simplemente está mal. Enviará el proceso vim a segundo plano
hek2mgl
2
@ MichaelKjörling: El ZZ solo necesita ser mayúscula.
LarsH
2
Sin embargo, esto solo cierra un archivo. Tengo muchas pestañas abiertas, por lo que tomaría toneladas de Zs.
Philip
41

ZZen modo normal, guarda el archivo actual si se modifica y sale o cierra la ventana / pestaña actual (igual que :xpero no lo :wqque escribe el archivo, incluso si no se ha modificado).

Para salir incondicionalmente después de haber escrito todos los archivos modificados en todas las ventanas, pestañas y buffers ocultos, necesita :xa(todavía no se cerrará si algunos archivos no se pueden escribir por alguna razón u otra)

Para salir incondicionalmente sin cambiar nada: ZQ(igual que :q!).

Stéphane Chazelas
fuente
1
Creo que te refieres al modo normal. "modo de comando" podría confundirse fácilmente con el modo de línea de comandos
David Brown
@DavidBrown, command modees el nombre tradicional, pero estoy de acuerdo en que normal modees menos ambiguo. He modificado la respuesta.
Stéphane Chazelas
33

:x es una clave menos que :wq

Tomasz Myrta
fuente
11
¡No tan bueno como Shift + Z Zsi!
CodeMedic
@CodeMedic Es, de lejos, el más rápido si tienes nno : ;y nno ; :, sin embargo. (más vno lo mismo). Tenía dudas sobre el intercambio, pero nunca volverás. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>y :nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>apoyar lo impar yap@"y tal.
jthill
20

Cree un mapeo personalizado para las tareas utilizadas con frecuencia. Si sale de vim con frecuencia, cree una asignación con pocas pulsaciones de teclas, p. Ej.

nnoremap <leader><leader> :xa<cr>

Si <leader>se establece en coma usando la let mapleader = ","coma dos veces, es una forma rápida de salir de vim y guardar los cambios. Si desea guardar una pulsación de tecla más cuando está en modo de inserción, también cree una asignación de modo de inserción correspondiente:

inoremap <leader><leader> <esc>:xa<cr>

Pero cuidado, esto puede ser accidentalmente bastante malo cuando golpeas <leaderdos veces.

Marco
fuente
1
Gracias por una respuesta exhaustiva, ¡me anima a aprender más sobre vim (que tiendo a evitar)!
vemv
44
@vemv, deberías trabajar al revés: cada vez que tengas que hacer lo mismo más de una vez, ¡mira si hay alguna manera de detener eso!
Wayne Werner
17

Usa esto para hacer la magia. ¡Solo dos pulsaciones de teclas!

Ctrl+ spara guardar,

ctrl+ dpara guardar y salir,

ctrl+ qpara salir descartando cambios.

1er. Pon esto en tu ~ / .bashrc

bind -r '\C-s'
stty -ixon

2do. Coloque esto en su ~ / .vimrc

inoremap <C-s> <esc>:w<cr>                 " save files
nnoremap <C-s> :w<cr>
inoremap <C-d> <esc>:wq!<cr>               " save and exit
nnoremap <C-d> :wq!<cr>
inoremap <C-q> <esc>:qa!<cr>               " quit discarding changes
nnoremap <C-q> :qa!<cr>

3er. ¡Reinicie vim y obtenga días más productivos!

Brain90
fuente
2
¿Por qué usar CTRL + D / CTRL + Q para guardar + salir, y no solo ZZ y ZQ?
Evan Carroll
Hola Evan, ctrl + d / ctrl + q solo necesitan dos teclas, mientras que ZZ y ZQ necesitan tres teclas. shift + z + z / shift + q + q. Una clave para guardar es importante si hacemos esto con frecuencia. Además, crecimos con ctrl + s como atajo de guardado, creo que es más intuitivo que ZZ o ZQ.
Brain90
44
Siempre he considerado que ZQ es peligroso. Puede intentar presionar ZQ para no guardar, pero si accidentalmente presiona Z dos veces, se ha ido y ha guardado su archivo sin querer.
Keith Devens
1
Si estás en una Mac, usa ~ / .bash_profile. Y recuerda buscarlo.
Snowcrash
16

¿Qué tal solo Qpara 'Salir'?

Eso solo requerirá una pulsación de tecla desplazada (es decir, Shifty Q). También es una combinación de teclas que rara vez golpeo por accidente.

Por defecto, vim asigna Q a switch to "Ex" mode. Si encuentra que el modo "Ex" es tan inútil (o molesto) como yo, entonces no perderá su función predeterminada.

Esto es lo que tengo en mi .vimrcarchivo:

" allow quit via single keypress (Q)
map Q :qa<CR>

Si tiene buffers no guardados, se lo indicará antes de salir.

Lambart
fuente
de alguna manera en mi VIM Q ya estaba asignado :qpor defecto. Gracias por el consejo.
user13107
7

Aquí hay una hoja de trucos para VIM

Cheat-sheet-for-VIM

To quit the vi editor without saving any changes you've made:

If you are currently in insert or append mode, press Esc. 

Press  :  (colon). The cursor should reappear at the lower left corner of the screen beside a colon prompt. 

Enter the following:
  q!
This will quit the editor, and all changes you have made to the document will be lost.

Algo mas ::

Cerrar y guardar archivos

When you edit a file in vi, you are actually editing a copy of the file rather than the original. The following sections describe methods you might use when closing a file, quitting vi, or both.
Quitting and Saving a File

The command ZZ (notice that it is in uppercase) will allow you to quit vi and save the edits made to a file. You will then return to a Unix prompt. Note that you can also use the following commands:

:w  to save your file but not quit vi (this is good to do periodically in
    case of machine crash!).
:q  to quit if you haven't made any edits.
:wq to quit and save edits (basically the same as ZZ).
Quitting without Saving Edits

Sometimes, when you create a mess (when you first start using vi this is easy to do!) you may wish to erase all edits made to the file and either start over or quit. To do this, you can choose from the following two commands:

:e! reads the original file back in so that you can start over.
:q! wipes out all edits and allows you to exit from vi.
vkulkarni
fuente
Los últimos 2 deben agregar "desde la última vez que se guardó el archivo" ... es "obvio", pero un principiante podría entender "genial, es desde que abrí vi", y descubro que no, si guardaron durante la sesión ": q! " no recuperará el archivo original en absoluto, y tampoco ": e!". Simplemente descartará las modificaciones que ocurrieron desde la última vez que se abrió o guardó el archivo (lo que sea más reciente).
Olivier Dulac
3

Mi solución simple y conveniente para salir y guardar desde vim es:

Ctrl+ Xatajo.

Solo agregue este código al .vimrcarchivo:

"Fast quit and save from normal and insert mode
:map <C-X> <ESC>:x<CR>
:imap <C-X> <ESC>:x<CR>
skywinder
fuente
1
Bien, pero ¿por qué <C-Q>no es mapeable?
friederbluemle
2

Tratar

nno : ;
nno ; :
vno : ;
vno ; :

Si usa fFtT, esto llevará un tiempo acostumbrarse, pero ahora dejar de fumar es solo ;xpara guardar si es necesario, ;qpara no guardar. Además, todo lo demás también se vuelve más rápido.

jthill
fuente