Otras formas de salir del modo Insertar además de Escape

74

La razón principal por la que me gusta vim sobre emacs es que la distancia de movimiento de mi mano lejos de la fila de inicio es muy baja (incluso como programador). Sin embargo, la única vez que hago esto es salir del modo de inserción, presionando Escape.

Recientemente aprendí que también puedo usar Ctrl + C para salir del modo de inserción. Sin embargo, esto no es realmente una mejora.

¿Cómo puedo salir del modo de inserción sin que mis manos salgan de la fila de inicio y sin afectar masivamente lo que tengo la capacidad de escribir? Nota: Utilizo un vim principalmente vainilla con una distribución de teclado dvorak, aunque también me encantaría escuchar soluciones para una distribución qwerty.

durron597
fuente
1
Puede asignar cualquier combinación de teclas en cualquier lugar, y no puede hacer nada más. ¿Es eso lo que quieres decir?
yo '
3
Aprendí el atajo Ctrl + c THX!
Philippe Gachoud
¿Qué hay de mapear Caps Lock como Esc?
Kolob Canyon
@PhillippeGachaud: No use Ctrl-C como reemplazo de Esc. Ctrl-C no es lo mismo que Escape, es un Escape forzado y puede comportarse de manera diferente en algunas circunstancias.
Mentira Ryan

Respuestas:

60

Un enlace común que verá es jj , porque funciona bien para diseños QWERTY si usa el posicionamiento de la fila de inicio.

inoremap jj <ESC>

En ese caso, para escribir un literal jj, debe esperar 1 segundo (por defecto) entre escribir el segundo carácter. (ver :help 'timeout'para más detalles)

También hay una c-oque lo sacará de la inserción, permitiéndole hacer un comando normal y luego volverlo a insertar.

http://vim.wikia.com/wiki/Avoid_the_escape_key

Jared
fuente
1
En dvorak, jes la cclave. Entonces esto no sería tan malo (para escribir cc). También podría vincular hh(qwerty jkey = dvorak h), que solo me arrancaría si estaba escribiendo shhhhhhho algo así.
durron597
77
cc es una combinación de teclas de dos letras mucho más común, al menos en inglés. Por lo que puede no ser la mejor opción
Nick J Adams
44
¿Qué tal imitar jk? Encuentre dos teclas adyacentes en Dvorak pero que no sean combinaciones comunes en su idioma preferido. tn, por ejemplo, es el equivalente posicional de jk.
David Lord
1
Me gusta tener jk/ kjsalir del modo normal incluso en Dvorak; son las teclas "c" y "v" en un teclado QWERTY, por lo que son fáciles para el puntero izquierdo y los dedos medios.
alxndr
2
Creo que podemos hacerlo aún mejor: usar iien su lugar. Sí, tiene que mover los dedos de la fila de inicio, pero aún así es cómodo. Y aún más importante, puede alternar entre modos sin mover el dedo.
Sridhar Sarnobat
38

Al lado de las alternativas incorporadas <C-[>y <C-c>de <Esc>clave citados por otros, otra solución popular es para volver a asignar <CapsLock>como un escape adicional. Esto tanto en un teclado Qwerty como en Dvorak.

De esta manera, puede presionar Esc muy fácilmente con el dedo meñique izquierdo, sin quitar las manos de HomeRow (casualmente, CapsLock es donde solía estar Escape en los teclados cuando se inventó vi).

La reasignación se puede hacer:

  • en Windows usando la utilidad AutoHotKey ;
  • en Mac usando la utilidad KeyRemap4MacBook y otros;
  • en Linux, varía según el entorno de escritorio. Por ejemplo, en Linux Mint / Cinnamon solo es cuestión de seleccionar la opción adecuada en Menú-> Teclado-> Diseños de teclado-> Comportamiento de bloqueo de mayúsculas. Alternativamente, pero con menos facilidad, se puede reasignar a nivel Xorg usando el programa xmodmap y haciendo que ejecute el siguiente .Xmodmaparchivo:

    clear Lock
    keycode 0x42 = Escape
    

    El sistema se puede configurar para ejecutarlo automáticamente en cada inicio de sesión colocando estratégicamente las siguientes líneas de script de shell (suponiendo que .Xmodmapesté en su directorio de inicio ~) en la cadena de archivos de inicio de sesión automático:

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    Sin embargo, es complicado, porque los archivos de origen varían según el entorno (de escritorio) utilizado. Como ejemplo, he llamado a xmodmap como una entrada en las "Aplicaciones de inicio" de Cinnamon (que me permite hacer más que la personalización estándar de reasignación de claves GUI).

Algunas personas van más allá y programan la tecla CapsLock para comportarse:

  • como Ctrltecla presionándola y sosteniéndola,
  • como Esctecla presionando y soltándolo rápidamente.

Esto se puede hacer en Windows y Mac configurando / programando correctamente la utilidad de reasignación correspondiente (específicamente para las sugerencias de AutoHotkey aquí y para KeyRemap4MacBook ver aquí ). En Linux usando el programa xcape .

Giovanni Maggiorani
fuente
2
Completamente de acuerdo. Tener la tecla ctrl en la fila de inicio mejora la facilidad de uso (desplazarse por las terminaciones con ctrl + n, desplazarse por el archivo con ctrl + f / ctrl + b, escapar con ctrl +] etc. Todos estos combos de teclas son más fáciles de realizar de esta manera.
John O'M.
1
Acerca de presionar la Ctrltecla (en la posición normal) sin torcer el dedo meñique: puede presionarlo con la palma externa de la mano, como se describe bien aquí (encontré este buen truco inteligente en la 'Red, hora de darle volver :) y felicitaciones a quien lo inventó)
Giovanni Maggiorani
FWIW KeyRemap4MacBook ha cambiado su nombre a Karabiner: pqrs.org/osx/karabiner/index.html.en
alxndr
Intenté esta solución, pero descubrí que golpeé Caps Lock por accidente al presionar Shift algunas veces, lo que era molesto. Por lo tanto, su kilometraje puede variar dependiendo de qué tan ágil sea su dedo meñique izquierdo. :)
Godsmith
2
Si reasigna Ctrla Alt( Cmd) y viceversa, entonces <C-[> realmente brilla. Pinky es débil, el pulgar es fuerte. En QWERTY ni siquiera necesita dejar la fila de casa para eso, en Dvorak no es tan bueno, pero aceptable.
Nash Bridges
28

Las asignaciones que uso son:

inoremap jk <esc>
inoremap kj <esc>

De esta manera, puedes simplemente golpear jy kal mismo tiempo, sin tener que preocuparte por cuál presionas primero.

Perilla de la puerta
fuente
70
¡Pero estoy escribiendo un libro sobre jugar a Edsgar Dijkstra jugando al blackjack en Reykjavik! ;)
durron597
Ambos son horribles si quieres escribir holandés.
Hielke Walinga
12

<C-[>y <C-c>son dos alternativas nativas a <Esc>.

Ver :help i_<esc>y :help i_ctrl-cque explica la diferencia entre <C-c>y <Esc>.

romainl
fuente
Una vez más, estas no son mejoras, ya que Ctrl está tan lejos de la fila de inicio como Escape.
durron597
44
@ durron597 En un teclado QWERTY, Ctrl puede estar tan lejos de la fila de inicio, pero tiene una diferencia importante: está debajo de la fila de inicio. Solo tiene que mover el dedo para presionarlo, mientras que con Esc debe girar un poco toda la mano. Además, <C-[>tiene una simetría agradable (ambos dedos pequeños se mueven en direcciones opuestas).
wchargin
66
Tenga en cuenta que <C-c> no es exactamente lo mismo que<Esc> .
wchargin
2
Convenido. El uso habitual de <C-c>puede romper sutilmente los complementos y autocmds.
David Lord
En mi máquina, es <C - [> funciona, pero tarda medio segundo más en registrarse que <Cc>
Alexander Mills
4

Puede asignar Caps Locka Control sin utilizar ningún programa externo :

  • En Mac OS X, visite Preferencias del sistema> Teclado -> Teclas modificadoras
  • En Linux ejecuta:setxkbmap -option caps:ctrl_modifier
  • En Windows edite su registro.

Esto lleva Controla la fila de inicio, lo que hace que sea más fácil presionar todos los trazos modificados de Control, incluidos Ctrl-[y Ctrl-Cque salen del modo Insertar en Vim.

Alternativamente, en la parte inferior de su respuesta, Giovanni sugiere mapear Caps Lockpara realizar ambos Control y Escape dependiendo de la longitud de la prensa, pero esto requiere la instalación de un software adicional.

Ctrl-[Es la alternativa preferida , ya que siempre funciona así Escape.

Una diferencia notable con Ctrl-Ces que al salir de una edición en modo visual en forma de bloques , Ctrl-Cse quedará con los cambios realizados en la línea actual, pero no vamos a repetir los cambios más de las otras líneas en el bloque, que es el punto de ese modo.

Tampoco buscará abreviaturas ni activará el evento InsertLeave. Ver:help i_CTRL-C

joeytwiddle
fuente
4

Sugeriría usar mi plugin vim-easyescape .

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

El problema con una secuencia de mapa simple inoremap jj <ESC>es que Vim hará una pausa cada vez que escriba jo ken modo de inserción (está esperando la siguiente tecla para determinar si se aplicará el mapeo). La pausa causa una distracción visual que puede notar o no. vim-easyescape no tiene ese problema y admite tiempos de espera personalizados.

Yichao Zhou
fuente
3

En la terminal vi y Vim, alt+ single-normal-mode-keyfuncionará para ediciones rápidas en la mayoría de las terminales.

Esto funciona porque la mayoría de las terminales envían el modificador alt como el carácter de escape. Por ejemplo, cuando escribe alt+kel emulador de terminal envía dos caracteres al programa en ejecución: esc, k. Vi y Vim interpretan esto como era de esperar; deja el modo de inserción (debido a la fuga) y ejecuta el comando de modo normal (en el ejemplo, mueve el cursor una línea hacia arriba).

Esta puede ser una forma conveniente de salir del modo de inserción si su teclado tiene la tecla alt al lado de la barra espaciadora (para que pueda presionarse con el pulgar, dejando los dedos en la fila de inicio), siempre que esté utilizando un emulador de terminal con este comportamiento y no me importa ejecutar un comando en modo normal.

ewatt
fuente
2
¿Puedes explicar qué es single-normal-mode-key? ¿Te refieres a Escape?
kenorb
Una sola pulsación de tecla que usaría en modo normal se puede usar en modo de inserción con la tecla alt. por ejemplo, Alt + x para eliminar un carácter.
ewatt
2
Tampoco entiendo esta respuesta; ¿Alt + x parece hacer algo diferente a Alt en modo normal? ¿Y algunas otras teclas no parecen funcionar? Pero tal vez lo estoy usando mal ...? Tal vez podría ampliar su respuesta un poco para explicar cómo funciona, y vincular a algunos documentos de Vim también sería bueno :-) ¡Gracias! :-)
Martin Tournoij
eso realmente depende de la configuración de su terminal y generalmente no está configurado como parece sugerir.
Christian Brabandt
1
Voté esto, luego revisé el historial y me di cuenta de que, por alguna razón, un moderador lo había editado para agregar el 99% del texto de la nada, en lugar de dejar un comentario como se espera que hagamos el resto de nosotros. Entonces tuve que revertir mi voto. ¿Seguramente lo que sucedió aquí va más allá del alcance de ediciones sensatas? He tenido ediciones mucho menos disruptivas rechazadas. El nuevo contenido es excelente, claro, pero no pertenece a esta respuesta. Debería haber sido suyo.
underscore_d
3

FWIW yo uso:

:map! ;l ^[
:vmap ;l ^[

Se siente similar a golpear Volver. También lo uso ;como líder para otras asignaciones de modo Insertar.

La única vez que he necesitado escribir ';' + letra es cuando el código de golf; No he tenido ningún conflicto de otra manera.

Antonio
fuente
quizás mejor mapearlo para escapar que mapearlo a ^ [¿verdad? :)
Alexander Mills
2

He estado usando Ctrl+ 3desde hace bastante tiempo, me resulta más fácil escribir que la mayoría de las alternativas y parece funcionar bien (al menos en Linux). My Caps Lockestá asignado a Ctrl, por lo que es muy cómodo escribirlo.

Intenté usar Ctrl+ cdurante algún tiempo, pero tuve algunos problemas con él que no recuerdo exactamente ahora, pero no estaba obteniendo exactamente el mismo comportamiento que Esc, como ahora tengo con Ctrl+ 3.

elias
fuente
2
¿Qué se supone que debe hacer Ctrl-3 exactamente?
Christian Brabandt
No sé cómo funciona, pero funciona como Escen Vanilla Vim. Lo encontré empíricamente probando combinaciones, no sé detalles sobre cómo funcionan las partes internas.
elias
1
Esto no es una cosa vi, funciona también en el shell. Muy útil en caso de que tenga habilitado el modo vi en su shell con bindkey -v
golfadas
1

Si tiene un teclado de inglés de EE. UU., Presionar Ctrl- [es equivalente a presionar Esc. Esto proporciona una manera fácil de salir del modo de inserción. Alternativamente, use Ctrl- c.

Si tiene vim en modo fácil ( -y), debe presionar Ctrl- l(Control-L) para salir del modo de inserción.

También hay Ctrl+ o, que será único modo de inserción salida temporal sólo para ejecutar un comando y volver al modo de inserción (ver: :help i_CTRL-O)

O Ctrl+ r, pero es sólo para insertar contenido del registro o expresión, por ejemplo, Ctrl+ r, =5*5(ver: :help i_CTRL-R, :help c_CTRL-Ry después stackoverflow ).

Lea más en: Evite la tecla de escape en vim wikia

kenorb
fuente
3
FYI: Ctrl+res para insertar registros (incluida la expresión =reg). Si desea ejecutar temporalmente un comando de uso único Ctrl+o.
Sukima
1

Me he conformado <A-e>con el escape:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

Editar: Acabo de encontrar <C-\><C\n>qué te envía al modo normal desde cualquier otro modo. También tiene un mejor comportamiento general. Las asignaciones se convierten en:

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>
J. Doe
fuente
0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

Vuelvo a asignar la pestaña para salir. Creo que históricamente es donde solía estar la clave esc, así que la usé y nunca miré hacia atrás. Casi nunca necesito poner una pestaña en un documento, y cuando lo hago solo presiono shift + tab. Nunca me perdí el enlace de la pestaña original.

Wumbo
fuente
El párrafo sobre vim y emacs es completamente innecesario ...
D. Ben Knoble