Atravesar texto en modo Insertar

Resuelto Andreas Grech asked hace 14 años • 13 respuestas

Mientras está en el modo Insertar en Vim, ¿hay alguna forma de recorrer el texto moviendo algunos caracteres hacia adelante y hacia atrás además de usar las teclas de flecha?

Si presiono h, jy kmientras lestoy en el modo Insertar, los caracteres reales se imprimen en la pantalla en lugar de moverse por el texto.

La forma en que lo estoy haciendo en este momento es tener que recurrir a Ctrl+ [( Esc) y luego recorrer el texto; pero obviamente eso no es productivo.

Andreas Grech avatar Nov 15 '09 17:11 Andreas Grech
Aceptado

Si bien puede tener sentido que puedas usar las h j k lteclas para recorrer el editor en modo de inserción, ¡esa no es en realidad la forma en que Vim debe usarse! Hay muchos comandos que Vim proporciona para hacer que la edición sea más rápida y sencilla.

La forma correcta es presionar Esc, ir a donde quieras hacer una pequeña corrección, arreglarlo, regresar y seguir editando. Es efectivo porque Vim tiene muchos más movimientos que los habituales de los personajes hacia adelante/atrás/arriba/abajo. Una vez que aprenda más sobre ellos, esto será más productivo.

Aquí hay un par de casos de uso:

  • Accidentalmente escribiste "accidentalmente". No hay problema, la secuencia EscFfrdAcorregirá el error y te llevará de vuelta al lugar donde estabas editando. El Ffmovimiento moverá el cursor hacia atrás hasta el primer carácter "f" encontrado. Compare eso con Ctrl+ DeldEnd, que hace prácticamente lo mismo en un editor informal, pero requiere más pulsaciones y le hace mover la mano fuera del área alfanumérica del teclado.
  • Accidentalmente escribiste "escribiste accidentalmente", pero quieres corregirlo a "escribiste intencionalmente". Luego Esc2bcwborrará la palabra que deseas corregir y te llevará al modo de inserción, para que puedas volver a escribirla inmediatamente. Para volver a editar, simplemente presione Aen lugar de End, para no tener que mover la mano para alcanzar la Endtecla.
  • Accidentalmente escribiste "mouse" en lugar de "ratones". No hay problema: el viejo Ctrl+ weliminará la palabra anterior sin salir del modo de inserción. Y resulta mucho más rápido borrar una palabra pequeña que corregir errores que contiene. ¡Estoy tan acostumbrado que cerré la página del navegador cuando estaba escribiendo este mensaje...!
  • El recuento de repeticiones está en gran medida infrautilizado. Antes de realizar un movimiento, puedes escribir un número; y el movimiento se repetirá este número de veces. Por ejemplo, 15hhará que el cursor retroceda 15 caracteres y 4jlo moverá 4 líneas hacia abajo. Empieza a usarlos y pronto te acostumbrarás. Si cometió un error a diez caracteres de su cursor, descubrirá que presionar la tecla 10 veces es mucho más lento que el enfoque iterativo para mover el cursor. Por lo tanto, puede escribir rápidamente las teclas 12h(como una estimación aproximada de cuántos caracteres hacia atrás necesita para mover el cursor) e inmediatamente avanzar dos veces llpara corregir rápidamente el error.

Pero, si aún desea realizar pequeños recorridos de texto sin salir del modo de inserción, siga los consejos de rson y use + . Tomando el primer ejemplo que mencioné anteriormente, + lo moverá a un carácter "f" anterior y lo dejará en modo de inserción.CtrlOCtrlOFf

P Shved avatar Nov 15 '2009 11:11 P Shved

Mientras esté en modo de inserción , use CtrlOpara ir al modo normal con un solo comando:

CTRL-O h  move cursor left 
CTRL-O l  move cursor right
CTRL-O j  move cursor down
CTRL-O k  move cursor up

que es probablemente la forma más sencilla de hacer lo que quieres y es fácil de recordar.

Otras teclas de control muy útiles en modo insertar:

CTRL-W    delete word to the left of cursor
CTRL-O D  delete everything to the right of cursor
CTRL-U    delete everything to the left of cursor
CTRL-H    backspace/delete
CTRL-J    insert newline (easier than reaching for the return key)
CTRL-T    indent current line
CTRL-D    un-indent current line

Esto eliminará muchos cambios innecesarios para volver al modo normal.

Chris Sattinger avatar Mar 29 '2013 12:03 Chris Sattinger

Modo de inserción

Movimiento

hjkl

A pesar de lo que dijo Pavel Shved (que probablemente sea más recomendable acostumbrarse a Escimitar el modo Insertar), aquí hay un conjunto de ejemplos de asignaciones para una navegación rápida dentro del modo Insertar:

" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l

Esto hará que Alt+ hen el modo Insertar vaya un carácter a la izquierda, Alt+ jhacia abajo y así sucesivamente, de manera análoga al hjklmodo Normal.

Debe copiar ese código en su archivo vimrc para cargarlo cada vez que inicie vim (puede abrirlo escribiendo :new $myvimrccomenzando en modo Normal).

Cualquier movimiento en modo normal

Dado que la Alttecla modificadora no está asignada (a algo importante) de forma predeterminada, de la misma manera puede extraer otras (o todas) funciones del modo Normal al modo Insertar. Por ejemplo:
Moverse al principio de la palabra actual con Alt+ b:

inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w

(Otros usos de Alten modo Insertar)

Vale la pena mencionar que puede haber mejores usos para la Altclave que replicar el comportamiento del modo Normal: por ejemplo, aquí hay asignaciones para copiar desde una línea adyacente la parte desde la columna actual hasta el final de la línea:

" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e> 
    \<Esc>
    \jl
        \y$
    \hk
        \p
        \a
" Insert the rest of the line above the cursor.
" Mnemonic: Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y> 
    \<Esc>
    \kl
        \y$
    \hj
        \p
        \a

(Utilicé \ continuación de línea y sangría para aumentar la claridad. Los comandos se interpretan como si estuvieran escritos en una sola línea).

Teclas de acceso rápido integradas para editar

CTRL-H   delete the character  in front of the cursor (same as <Backspace>)
CTRL-W   delete the word       in front of the cursor
CTRL-U   delete all characters in front of the cursor (influenced by the 'backspace' option)

(No hay teclas de acceso rápido incorporadas notables para el movimiento en el modo Insertar).

Referencia::help insert-index


Modo de línea de comandos

Este conjunto de asignaciones hace que los movimientosAlt + superiores estén disponibles en la línea de comandos:hjkl

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>

Alternativamente, estas asignaciones agregan los movimientos tanto al modo Insertar como al modo Línea de comandos de una sola vez:

" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>

Los comandos de asignación para pasar los comandos del modo Normal al modo de línea de comandos se ven un poco diferentes de los comandos de asignación del modo Insertar (porque el modo de línea de comandos carece del Ctrl+ del modo Insertar O):

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'

Teclas de acceso rápido integradas para movimiento y edición.

CTRL-B       cursor to beginning of command-line
CTRL-E       cursor to end       of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one word left
<C-Left>     cursor one word left
<S-Right>    cursor one word right
<C-Right>    cursor one word right

<LeftMouse>  cursor at mouse click

Referencia::help ex-edit-index

Aaron Thoma avatar Jun 10 '2011 19:06 Aaron Thoma

Si eres un purista de vim, omite leer esta respuesta. OTOH, si eres nuevo en vim y estás buscando algunos consejos útiles que no encontrarás en los cientos de tutoriales y blogs de vim, sigue leyendo... :-)

Algunas formas no ortodoxas (vim)

Estamos en 2014 y, como alguien que ha regresado recientemente, vimpuedo ofrecer algunos puntos de vista y consejos potencialmente contrarios.

Utilice mayús+izquierda o mayús+derecha para recorrer palabras

Si bien la repetición es un concepto poderoso en vim, a mí (personalmente) me resulta extraño que usarla me obligue a contar (líneas, caracteres, palabras, etc.) o a hacer conjeturas. Mi cerebro normalmente funciona como "Quiero el cursor allí " y no como "Quiero el cursor _5_palabras_a_la_izquierda_". Poder mover rápidamente el cursor y observar visualmente dónde está el punto de inserción de esta manera me permite concentrarme en lo que estoy editando en lugar de tener que contar cuántos saltos necesito hacer para llegar a donde necesito editar.

Active el modo mouse y use la rueda del mouse y haga clic

...para navegar por grandes cuerpos de texto.

La mayoría (todas) las computadoras modernas tienen un panel táctil que está estrechamente integrado con el teclado (por ejemplo, MacBooks). Los diseñadores industriales han pasado muchos años optimizando estos diseños para que el viejo problema de tener que alejar la mano del teclado ya no sea un problema real. Bien, lo es si estás acostumbrado a usar un mouse y no te gusta cambiar, pero para cualquiera que sea nuevo en vim (como aquellos que pueden encontrar esta publicación mediante una búsqueda), esto no debería ser un gran problema.

Como beneficio adicional, hacer clic y arrastrar te pone en modo visual.

Con el mouse habilitado, hacer clic y arrastrar tiene el efecto de cambiar al modo visual y marcar una región para tirar.

Y usa la rueda de desplazamiento

Usar el mouse (rueda) para desplazarse y hacer clic para posicionar el cursor (duh) simplemente funciona. Consulte http://usevim.com/2012/05/16/mouse/ para obtener más información sobre esto.

Y entonces...

Estas son lo que yo llamaría formas más modernas (usando el mouse, la rueda de desplazamiento, etc.) de navegar en vim, igualmente efectivas dependiendo de su preferencia de entrada.

HT

Shyam Habarakada avatar May 10 '2014 03:05 Shyam Habarakada