Remapear la tecla Esc en Vim

12

¿Es posible reasignar la Escclave a otra clave en Vim? Cuando uso Vim en una ventana de la consola del cliente web VMware vSphere en pantalla completa y presiono la Esctecla para salir del modo de edición, también me saca del modo de pantalla completa en la ventana de la consola.

Estoy usando el Vim que viene del repositorio RHEL YUM. (RHEL 7.5; Vim 7.4).

Beam Davis
fuente
Publicación cruzada
Rui F Ribeiro
2
Hagas lo que hagas, no asignes esc a otra cosa. Mapear algo más para esc.
D. Ben Knoble

Respuestas:

11

Por lo general, C-[también es una forma de salir del modo de inserción. A algunas personas les gusta mapear jjen modo de inserción como una forma de salir y volver al modo normal. Personalmente, prefiero jhque mis dedos se "deslicen" mejor con esto y no fuerzo mucho mi dedo medio.

Desde algún lugar en mi configuración de neovim:

inoremap jh <Esc>

Esto reasigna jhpara escapar en modo de inserción.

¿Es esto lo que querías?

Amir Eldor
fuente
3
Ctrl- [es lo mismo que 'ESC'
Herb Wolfe
Jugué y también descubrí que esto funciona: ": inoremap <F1> <Esc>". Esto asigna la tecla F1 en el lugar de la tecla Esc. Esto se puede acortar a ": ino <F1> <Esc>".
Haz Davis el
Además, las letras mayúsculas no son necesarias.
Haz Davis el
Sí, las mayúsculas no son necesarias y 'ino' es más corto de escribir, pero en mis configuraciones prefiero la brevedad sobre los atajos geniales. Me alegro de haber ayudado!
Amir Eldor
Si bien la brevedad es genial y todo ... es el alma del ingenio después de todo ... Supongo que querías decir otra cosa. ¿Claridad? ¿Verbosidad? No brevedad? ;)
Capa B
8

TL; DR

En realidad, es agradable reasignar esca la fila de inicio. Así es como decide a qué asignarlo: elija una mano y pase los 4 dedos por el escritorio tan rápido como pueda en la dirección que sea más rápida. Use eso para elegir qué teclas reasignar.

Para mí es más natural pasar del meñique al dedo índice. Por lo tanto, elegí usar kj. Además, hice un grep -rHin kj ~/src(grep recursivo en el directorio principal de todo mi código fuente) y no encontré coincidencias.

" esc in insert mode
inoremap kj <esc>

" esc in command mode
cnoremap kj <C-C>
" Note: In command mode mappings to esc run the command for some odd
" historical vi compatibility reason. We use the alternate method of
" existing which is Ctrl-C

Nota: Si necesita escribir un literal kj(o lo que sea su mapeo) simplemente escríbalos con 2 segundos entre ellos. (Verá que el cursor duda en moverse después del primer carácter. Espere a que se mueva antes de escribir el segundo).


Lo he estado usando vimdurante 19 años. Me horroricé cuando Apple actualizó sus MacBook Pros para tener una barra táctil y ninguna esctecla física . Vi un anuncio que sugería mapeo jjy jka <Esc>y lo odiaba. Pero pacientemente escribí una tarjeta de índice cada vez que me molestó. Unos 15 minutos más tarde revisé mis notas y se me ocurrió el TL; DR anterior para abordar lo siguiente:

  1. Tiendo a golpear la escasignación cuando no estoy en modo de inserción solo para "estar seguro" y jjme dejaría caer 2 líneas.
  2. jkes un no-op (abajo, arriba) pero kjes más natural para mis manos.
  3. También necesito usar escpara salir del modo de comando sin completar el comando.

Es mi esperanza que finalmente pueda romper mi hábito de golpear escen otras aplicaciones y cerrar ventanas cuando llevo varios minutos escribiendo. ¡Prefiero insertar caracteres extraviados de kj que perder mi trabajo!

Bruno Bronosky
fuente
1
Tenga en cuenta que, para su cnoremap, cuando el esc proviene de un mapeo, ejecutará el comando, en lugar de cancelarlo. Eso es por razones de compatibilidad con vi
Christian Brabandt
Tanto en el modo de inserción como en el de comando, esc aún funciona. Pero también tiene este combo de fila de inicio alternativo que también usa. Tal vez no seguí tu punto.
Bruno Bronosky
2
el punto es, para el modo de comando, un escape que proviene de la asignación no abortará el comando, sino que lo ejecutará. Prueba:ls kj
Christian Brabandt
@ChristianBrabandt tienes razón. ¿Qué se puede hacer al respecto? O al menos, ¿dónde está esto documentado? Ni siquiera puedo encontrar términos de búsqueda decentes para encontrar algo sobre esto.
Bruno Bronosky
1
No recuerdo si esto se está documentando, me topé con ese comportamiento hace varios años. Ah, está algo documentado en :h c_Esc: En macros [...] comience el comando ingresado. (Las macros generalmente también incluyen asignaciones)
Christian Brabandt