salir como comandos buscar borrar archivo vim vi

vim - como - Desplazar texto en modo Insertar



salir de vi linux (12)

Mientras está en el modo Insertar en Vim, ¿hay alguna forma de atravesar el texto moviendo algunos caracteres hacia adelante y hacia atrás de otra manera que no sea usando las teclas de flecha?

Si presiono h , j , k y l mientras estoy en el modo Insertar, los caracteres reales se imprimen en la pantalla en lugar de moverse a través del texto.

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


Modo de inserción

Movimiento

hjkl

A pesar de lo que Pavel Shved said , que probablemente sea más recomendable acostumbrarse al modo Insertar de Escape , 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 + h en el modo Insertar vaya un carácter a la izquierda, Alt + j abajo y así sucesivamente, de manera análoga a h j k l en el modo Normal.

Debe copiar ese código en su archivo vimrc para que se cargue cada vez que inicie vim (puede abrirlo escribiendo :new $myvimrc comenzando en el modo Normal).


Cualquier movimiento en modo normal

Debido a que la tecla modificadora Alt no está asignada (a algo importante) de manera predeterminada, puede, de la misma manera, obtener otra funcionalidad (o todas) del modo Normal al modo Insertar. P.ej:
Pasando al principio de la palabra actual con Alt + b :

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


(Otros usos de Alt en modo Insertar)

Vale la pena mencionar que puede haber mejores usos para la tecla Alt que para 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 directo incorporadas para la edición

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 directo 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 movimientos Alt + hjkl superiores estén disponibles en la línea de comandos:

" 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 de 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 llevar los comandos del modo Normal al modo de línea de comando se ven un poco diferentes de los comandos de asignación del modo Insertar (porque el modo de línea de comando carece de Ctrl + O en el modo Insertar):

" 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 directo 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


Creo que Home and End (y PageUp / PageDn ) también funcionan normalmente en el modo de inserción, pero aparte de eso, no creo que haya otras claves estándar definidas para el desplazamiento del texto.


En GVim, puedes usar el mouse. Pero honestamente, ¿qué hay de malo en usar las teclas de flecha? Hay una razón por la que están en un teclado.


Lo siento, pero vim no funciona de esa manera.

Debe cambiar al modo "normal", navegar y luego volver a insertar nuevamente.


Mientras está en el modo de inserción , use Ctrl O para ir al modo normal para 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 quiere y es fácil de recordar.

Otras teclas de control muy útiles en el modo de inserción:

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

Estos eliminarán muchos interruptores inútiles al modo normal.


Muchas personas en la comunidad Vim argumentan que no debes navegar en el modo Insertar, que no es la forma Vim. Creo que este es un sentimiento incorrecto aprendido al pasar de los editores estándar a Vim.

Vim es más poderoso cuando utiliza sus herramientas para crear acciones o hallazgos atómicos y repetibles.

Está bien navegar en el modo Insertar si está solucionando un error que cometió en la misma sesión Insertar. No debe navegar fuera del rango de texto que modificó.

Si comete un error al ingresar texto y sale del modo Insertar para solucionarlo, no podrá repetir la acción deseada,. Se repetirá la corrección.

Vim soporta muchas teclas de navegación del modo Insertar. Obviamente, existen las teclas de flecha, Inicio y Fin, pero también hay muchos otros accesos directos. Ver :h ins-special-keys .


Para algunos movimientos y acciones de uso frecuente, he definido las siguientes asignaciones. Esto ahorra una pulsación de tecla en comparación con la combinación CTRL + O y, dado que los necesito con frecuencia, a la larga dan sus frutos.

inoremap <A-$> <C-o>$ inoremap <A-^> <C-o>^ inoremap <A-h> <Left> inoremap <A-l> <Right> inoremap <A-O> <C-O>O inoremap <A-o> <C-o>o

Ser capaz de moverse a la derecha en el modo de inserción con ALT + l es especialmente útil para saltar las comillas y los paréntesis de cierre que vim genera automáticamente durante la codificación.


Para tener un poco mejor de navegación en el modo de inserción, ¿por qué no mapear algunas teclas?

imap <C-b> <Left> imap <C-f> <Right> imap <C-e> <End> imap <C-a> <Home> " <C-a> is used to repeat last entered text. Override it, if its not needed

Si puede evitar el funcionamiento de la tecla Meta en su terminal, puede simular el modo emacs aún mejor. La navegación en el modo normal es mucho mejor, pero para movimientos más cortos ayuda a permanecer en el modo de inserción.

Para saltos más largos, prefiero la siguiente traducción por defecto:

<Meta-b> maps to <Esc><C-left>

Esto cambia al modo normal y retrocede una palabra.


Parece que haces mal uso de vim, pero eso es probable debido a que no estás muy familiarizado con él.

La forma correcta es presionar Esc , ir a donde quiere hacer una pequeña corrección, corregirlo, regresar y seguir editando. Es efectivo porque Vim tiene muchos más movimientos que los caracteres habituales hacia adelante / atrás / arriba / abajo. Después de que aprendas más de ellos, esto resultará ser más productivo.

Aquí hay un par de casos de uso:

  • usted accidentalmente escribió "accifentally". No hay problema, la secuencia Esc F f r d A corregirá el error y lo devolverá a donde lo ha estado editando. El movimiento F f te llevará de vuelta al primer personaje "f" encontrado. Compare con Ctrl + <- -> -> -> -> del final d , que hace prácticamente lo mismo en un editor casual, pero toma más teclas, hace que mueva su mano fuera del espacio alfanumérico del teclado.
  • accidentalmente escribiste "accidentalmente escribiste", pero quieres corregirlo "intencionalmente escribiste". Luego, Esc 2 b c w borrará la palabra que desea corregir y lo llevará al modo de inserción, para que pueda volver a escribirla inmediatamente. Para volver a la edición, solo presione A en lugar de Fin , para llegar a la cual debe mover su mano
  • accidentalmente escribiste "ratón" en lugar de "ratones". No hay problema: el viejo y viejo Ctrl + W eliminará la palabra anterior sin salir del modo de inserción. Y resulta que es mucho más rápido borrar una palabra pequeña que corregir errores en ella. Estoy tan acostumbrado que cerré la página del navegador cuando estaba escribiendo este mensaje ...
  • recuento de repetición es en gran medida infrautilizado. Antes de hacer un movimiento, puede escribir un número; Y el movimiento se repetirá este número de veces. Por ejemplo, 1 5 h te devolverá 15 caracteres y 4 j te desplazará 4 líneas hacia abajo. Comience a usarlos y se acostumbrará pronto y descubra que presionar 10 veces la tecla <- es menos rápido que el enfoque iterativo para mover el cursor, cuando escribe 1 2 h , observe que cometió un error y corríjase inmediatamente con l l .

Pero, si aún desea realizar pequeños desplazamientos de texto sin salir del modo de inserción, siga los advice rson y use Ctrl + O. Como ejemplo, Ctrl + O F + f lo moverá al carácter f anterior y lo dejará en modo de inserción.


Podría usar imap para asignar cualquier tecla en el modo de inserción a una de las teclas del cursor. Al igual que:

imap h <Left>

Ahora h funciona como en modo normal, moviendo el cursor. (Mapear h de esta manera es obviamente una mala elección)

Dicho esto, no creo que la forma estándar de moverse en el texto utilizando VIM sea "no productiva". Hay muchas formas muy poderosas de atravesar el texto en modo normal (como usar w y b, y / y?, O f y F, etc.)


Puede crear asignaciones que funcionan en modo de inserción. La forma de hacerlo es a través de inoremap. Tenga en cuenta la ''i'' al principio del comando (noremap es útil para evitar colisiones de mapas clave). El corolario es ''n'' para el modo ''normal''. Puedes suponer que vim piensa que es ''normal'';)

SIN EMBARGO, realmente desea navegar en el texto usando el modo "normal". Vim es súper en este tipo de cosas y toda esa potencia está disponible desde el modo normal. Vim ya proporciona formas fáciles de pasar del modo normal al modo de inserción (por ejemplo, i, I, a, A, o, O). El truco es facilitar el acceso al modo normal. La forma de hacerlo es reasignar el escape a una clave más conveniente. Pero necesita uno que no entre en conflicto con su escritura normal. Yo suelo:

inoremap jj <Esc>

Ya que jj (eso es 2 js escrito uno tras otro rápidamente) no parece aparecer en mi vocabulario. Otros se reasignarán a donde sea cómodo.

El otro cambio esencial que hago es cambiar las teclas CAPSLOCK y CONTROL en mi teclado (usando la configuración del teclado de la computadora host) ya que casi nunca uso CAPSLOCK y tiene ese botón grande y hermoso justo donde lo quiero. (Esto es común para los usuarios de Emacs. ¡El inconveniente es que te encuentras en un teclado ''no arreglado''! ¡Aaarggh!)

Una vez que vuelve a asignar CAPSLOCK, puede usar cómodamente las siguientes remoceras de modo de inserción:

Teniendo en cuenta que algunas teclas ya están asignadas en el modo de inserción (hacia atrás-kill-word es Cw (Control-w) de forma predeterminada, es posible que ya tenga los enlaces que desea. Dicho eso, prefiero Ch, así que en mi .vimrc tengo :

inoremap <C-h> <C-w>

PERO, es probable que desee el mismo espasmo de memoria muscular en el modo normal, así que también asigno a Ch como:

nnoremap <C-h> db

(d) elete (b) ackwards logra lo mismo con el mismo acorde de tecla. Este tipo de edición rápida es una que encuentro útil en la práctica para los errores tipográficos. Pero apéguese al modo normal para moverse en el texto y cualquier otra cosa más que matar la palabra anterior. Una vez que adquiera el hábito de cambiar de modo (utilizando una reasignación, por supuesto), será mucho más eficiente que el modo de reubicación.


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

Algunas formas no ortodoxas (vim)

Es 2014, y como alguien que ha vuelto recientemente a vim , puedo ofrecer algunos puntos de vista y consejos potencialmente contrarios.

Use Mayús + izquierda o Mayús + derecha para atravesar palabras

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

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

... para navegar grandes cuerpos de texto.

La mayoría de las computadoras (todas) 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. Está bien, es si estás acostumbrado a un mouse y no te gusta cambiar, pero para alguien nuevo en vim (como aquellos que pueden encontrar esta publicación a través de una búsqueda), esto no debería ser un gran problema.

Como beneficio adicional, haga clic en + arrastrar lo pone en modo visual

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

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 más información sobre esto.

Y entonces...

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

HTH