2010-08-21 9 views
7

En Vim, es agradable usar hjkl en modo normal y sería genial seguir utilizándolos en el modo de inserción. Traté de asignarlos a Ctrl-h, Ctrl-j, Ctrl-k, Ctrl-l:¿Qué teclas asigna <left>, <down>, <up>, <right> comandos en modo de inserción VIM?

imap <C-h> <left> 
imap <C-j> <down> 
imap <C-k> <up> 
imap <C-l> <right> 

pero no es conveniente sobre todo porque máscaras Ctrl-H y de retroceso deja de responder. ¿Ha podido utilizar de algún modo las teclas HJKL para los movimientos en modo inserción?

+5

¿Por qué desea utilizar comandos normales en modo de inserción? Solo [hjkl] + i. Quizás Emacs sería más conveniente para ti si quieres este tipo de comportamiento. – alternative

+1

O use las teclas de flecha ... en realidad tienen más sentido para mover el cursor. : P – cHao

+3

En serio. El modo Insertar es para insertar * solo *: si pasa todo el tiempo en modo insertar, lo está haciendo mal. –

Respuesta

5

Estoy utilizando mapeo de mayúsculas doble en el modo de inserción para varios mapeos. Eso funciona bastante bien, excepto cuando estás pegando texto de algún lado. Por lo general, es más prudente borrar todas las asignaciones de inserción antes de insertar texto.

Así se puede tratar

imap HH <left> 
imap JJ <down> 

etc ...

Obviamente, necesitará el doble de pulsaciones de teclas como el movimiento normal, así que supongo que si usted necesita para navegar "lejos" es mejor para regresar en el modo de navegación.

+2

Puedes también escriba ': set paste!' para alternar entre activar y desactivar el modo de pegar. El modo Pegar inhabilita imaps, autoindents, etc. para que pueda pegar cómodamente cualquier cosa. Podrías crear una macro como 'map, p: set paste! 'para hacer eso más fácil, también. Luego ', p' activaría el modo pegar (incluso si está en el modo de inserción) y solo tendría que presionar', p' nuevamente desde el modo normal para apagarlo. – redbmk

1

Perdónenme por decirlo, pero qué útil sería hacer que funcionen como en modo normal. Quiero decir, ¿qué usarías para escribir hjkl entonces?

Pero, si realmente desea asignarlos, seguro, simplemente asócielos con <imap> <something-h> <some operation> y listo.

Aunque no veo ningún punto. Si quiere mantener sus manos en el medio del teclado, ¿por qué no mapear jj a <Esc>? (Algunos prefieren esa manera, para que no tengan que mover los dedos de la fila de inicio).

+0

Tengo jj asignado a esc en realidad, y encuentro un conveniente que funciona bien es mi pregunta – dimus

+0

@dimus - Bueno, no hay tantas opciones. Si tomamos la suposición de que no va a mapear el hjkl en el modo de inserción para el movimiento, entonces está atascado (en la mayoría de las máquinas) con combinaciones de Ctrl, Alt y Shift (que también es poco práctico). Eso sí, todavía no veo por qué querrías el movimiento en modo insertar (como un vimmer de 10 años, supongo que te habrás acostumbrado a "escribir en modo insertar, todo lo demás en modos N y E", pero a cada uno su propio – Rook

+0

. En vim prácticamente puede mapear cualquier cosa que da una señal cuando se presiona en combinación con otra cosa (es decir, no, por ejemplo), entonces ... el resto depende de usted. – Rook

3

He asignado mis teclas de flecha de modo normal al texto 'burbuja'. Es muy útil para mover bloques de código o texto con un mínimo esfuerzo.

" Useful bubble text normal mapping for arrow keys.                       
nnoremap <UP> ddkP 
nnoremap <DOWN> ddp 
vnoremap <DOWN> xp`[V`] 
vnoremap <UP> xkP`[V`] 

Definitivamente inspirado por el episodio de Drew Neil en Bubbling Text en VimCasts.org.

0

Estaba tratando de hacer lo mismo. Encontré la respuesta en el siguiente enlace: Traversing text in Insert mode.

Por alguna razón aún desconocida para mí, la vinculación Ctrl en modo insertar no funcionó para mí. Una alternativa es presionar Ctrl-O que cambia al modo normal para un comando, por lo que <C-o>h, <C-o>j, <C-o>k, le permitirá moverse mientras está en el modo de inserción. Por otra parte, he utilizado el siguiente mapeo que se me hace más corto que presionar más <C-o> h, j, k, l:

inoremap h<Tab> <Left> 
inoremap j<Tab> <Down> 
inoremap k<Tab> <Up> 
inoremap l<Tab> <Right>