Navegación en modo de inserción


20

Finalmente decidí abandonar las teclas de flecha para la navegación a favor de hjkl. Vim hardmodeUsé el complemento para deshabilitar las teclas de flecha.

Me acostumbré a la navegación bastante rápido, pero resulta que la navegación en modo de inserción de repente es imposible.

Hay alguna solución para esto ? (el modo de inserción existente no es una solución).


8
Sí: use las teclas de flecha :-) Para eso están allí ;-)
Martin Tournoij

@Carpetsmoker si las teclas de flecha están disponibles, las usaría en lugar de hjkl ...
stdcall

55
Pero la idea es que salir del modo de inserción (es decir, usarlo solo para lo que está destinado, es decir, pequeñas inserciones intercaladas con otros comandos) es exactamente la solución. Si no me equivoco, lo he visto en la ayuda, si encuentro un enlace lo publicaré. Parece que te has acostumbrado demasiado a eso, no a las teclas de flecha.
The Vee

Puede vincular su teclado para usar flechas como un atajo como <kbd> super </kbd> + <kbd> j </kbd> para moverse hacia abajo. <kbd> super </kbd> puede ser cualquier botón, por ejemplo <kbd> Caps Lock </kbd> es bastante común
ivanjermakov

Respuestas:


26

Hay muchas opciones que tienes. Una opción, y la OMI, la más sensata y fácil es dejar de deshabilitar las teclas de flecha. Entiendo por qué muchos vimmers hardcore dicen cosas como

¡Nunca más deberías volver a usar las teclas de flecha! ¡Cada vez que usa las teclas de flecha, pierde 3 minutos de tiempo, un cachorro muere y alguien cambia a Emacs!

(Obviamente estoy bromeando) Sin embargo, hay un propósito para las teclas de flecha. Son extremadamente útiles para navegar:

  • En modo de inserción

  • En la linea de comando

En general, cuando las personas le dicen que no use las teclas de flecha, es porque quieren que vuelva a aprender la navegación de una manera más parecida a la de Vim. Si te sientes cómodo hjkly usas principalmente las teclas de flecha en el modo de inserción, no hay una buena razón para obligarte a no usarlas.

La opción # 2 es reasignar ctrl-hjklpara actuar como teclas de cursor. Esto es bueno porque puedes quedarte en casa y encaja bien con la memoria muscular que ya has aprendido usando hjklen modo normal. De hecho, esto es lo que hago . El principal inconveniente de este enfoque es que puede ser un problema configurarlo en terminal vim porque <C-j>produce un NULbyte. Lo soluciono usando Gvim. No sé si hay una solución fácil para la consola vim o no.

La opción # 3 es usar <C-o>para hacer pequeños movimientos en modo normal. Por ejemplo, si estás escribiendo

Hello world!
     cursor^

y se da cuenta que ha olvidado una coma, en lugar de hacerlo leftleftleftleftleftleft, usted podría simplemente hacer <C-o>b<C-o>ho <C-o>2Fo, o cualquier otra combinación de movimientos de modo normal como usted.

Por supuesto, otra opción, y una que me gusta mucho es usar Esc, hacer algunos pequeños movimientos antes de volver al modo normal. Usted mencionó que preferiría no hacerlo, pero a veces esta es realmente la forma más eficiente.

Probablemente también haya otros enfoques, pero estos son los que me gustan que me han funcionado.


2
Interesante: noto que usa <c-o>gky en <c-o>gjlugar de <Up>y <Down>. ¿Porqué es eso?
Kyle Strand

44
@kylestrand gky gjvisualmente subir y bajar una línea, incluso si la línea está envuelta.
DJMcMayhem

44
No creo que esto sea suficiente para garantizar una respuesta por sí solo, pero me gusta tener las teclas de flecha deshabilitadas en modo normal (que es lo que me obligó a aprender HJKL), y habilitado en todos los demás modos ( noremap <Up> <NOP>...) . Pasas suficiente tiempo en modo normal para aprender HJKL, pero están ahí cuando lo necesitas. O al menos, considero que este es un punto medio cómodo entre dejarlos siempre apagados o siempre encendidos, y no requiere reasignar otras teclas (mucha gente como Ctrl-HJKL para moverse entre paneles).
Itai Ferber

Por cierto, BASH y cols. Admiten las combinaciones de teclas vi. Con estas asignaciones, puede <ESC> y usar hjkl para recorrer el historial de cmd (arriba / abajo) o modificar el comando actual (izquierda / derecha)
Rolf

9

Me gusta usar la tecla Control para convertir las hjklteclas de movimiento en teclas de movimiento "universales". Aquí está la parte relevante de mi .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

Las inoremapdeclaraciones se aplican al modo de inserción, mientras que las cnoremapque se aplican al modo de comando. (He estado usando este mapeo durante tanto tiempo que he olvidado si hay alguna forma de navegar por el historial del modo de comando sin él).

(Editar: veo que la otra respuesta ya ha mencionado esta posibilidad. Aún así, puede ser útil ver los comandos de mapeo reales).


3

Presiona y escluego usa hjkly wWbBy cualquier otra navegación que quieras hacer. El objetivo del modo difícil es conseguir que aprendas a navegar con movimientos vim más complejos. Haga pequeñas ediciones y luego muévase a una nueva ubicación, usando el modo normal.

Si no quieres aprender a navegar más rápido con el modo hard habilitado, mira mi respuesta de otra pregunta sobre el mismo tema.


3

Si desea mover más de UNA o DOS posiciones ...

... la mejor opción es golpear ESC, moverse y volver al modo de inserción nuevamente.

No tiene sentido crear mapeos como <C-h>moverse hacia la izquierda y luego comenzar a golpearlo demasiadas veces ... como usuario de vim no se supone que debe presionar la misma tecla varias veces para lograr un movimiento inteligente.

(Si la ESCtecla no está cerca de tus dedos, sería una buena opción crear una asignación para ella).

Si desea mover UNA o DOS posiciones en el modo de inserción ...

... una buena opción sería definir algunos movimientos usando su <Leader>clave:

(Lo uso ,como <Leader>clave ya que se siente cerca y cómodo para mis dedos)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.