Navegación súper rápida VIM

91

Lo único que extraño de usar otros editores es encontrar mi lugar con el mouse. Puedo mirar con mis ojos a un área específica en el archivo y con un movimiento del mouse y un clic estoy allí. Con VIM tengo que jjjjjkkkkkkjjjjhhhh ... casi ahí hhhhh oh mierda me perdí por 3 caracteres, lll.

Estoy aprendiendo a hacer marcas y encontré un complemento de marcadores que es genial, puedo crear marcadores y destruirlos <f3>y navegar hacia ellos, desafortunadamente, las marcas se olvidan cuando se cierra el archivo.

¿Cómo super navegan todos los archivos? Sé que también podría hacer 5j7k4j5h y así sucesivamente, pero debe haber un complemento que pueda leer mis ojos y colocar el cursor donde realmente lo necesito ...

También aprendí a usar /% para buscar un término específico. Ayuda, pero todos los caracteres coincidentes se resaltan en todo el documento.

Helmut Granda
fuente
Todas las respuestas son excelentes, mientras aún estamos en el tema, pensé que podía experimentar con algo como nG (ir a la línea Número) f% (encontrar el primer carácter de lo que estoy buscando, o como alguien sugirió usar la w para seguir adelante a la siguiente palabra.
Helmut Granda

Respuestas:

173

Pruébelo $ vimtutor, le enseñará todo lo que necesita saber para comenzar.

hjkl son la punta de la punta del iceberg y se usan muy poco, al menos en mi caso.

wWEey BbgegEtodos permiten mover palabra por palabra:

  • wy esiga adelante, Wy Etenga en cuenta los espacios en blanco y la puntuación

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • by geretroceda, By gEtenga en cuenta los espacios en blanco y la puntuación

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTse utilizan para alcanzar un carácter en particular en la línea actual y ;,se utilizan para repetir ese movimiento, en la misma dirección ;y en la dirección opuesta para ,:

  • fmsalta al siguiente mhacia adelante, Fva hacia atrás

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmsalta ANTES del siguiente mavance, Tretrocede

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? se utilizan para saltar a la primera aparición de un patrón desde la posición actual del cursor:

  • /pattern sigue adelante

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern va hacia atrás

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ se utilizan para saltar al primer y último carácter de la línea.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ se utilizan para saltar al primer y último carácter imprimible de la línea.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Único y combinado ()[]{}se utilizan para mover frase por frase o párrafo por párrafo o bloque de código por bloque de código.

<C-b>y <C-f>se utilizan para desplazarse por la pantalla hacia atrás y hacia adelante.

<C-u>y <C-d>se utilizan para desplazarse por la mitad de la pantalla hacia atrás y hacia adelante.

H, MY Lmover el cursor a la parte superior, media, parte inferior de la ventana gráfica, respectivamente.

zt, zzY zbmover la línea bajo el cursor a la parte superior, media, parte inferior de la ventana gráfica, respectivamente.

Y así.

:help motion.txt te dejará boquiabierto.

romainl
fuente
17
No suelo hacer esto, pero este comentario es solo para decirte que esta es una gran respuesta.
jojo
Por alguna razón, nunca antes había usado H, M o L, ¡buenos consejos!
Chris
Agregar eso ]}y [{(2 pulsaciones de tecla) salta al final o al comienzo de un alcance (por ejemplo, uno definido por{ ... }
Matthew Woo
3
Bueno, esto todavía no responde realmente a la pregunta de OP how to jump to a line he's seeing like using a mouse. Conozco y utilizo todas las combinaciones de teclas que mencionaste todo el tiempo. Pero aún no es tan eficiente como apuntar con el mouse al saltar grandes distancias.
Penghe Geng
sí, H, M, L son fáciles de recordar: alto, medio, bajo;) @Chris
nils petersohn
25

además del comando de movimiento de vim, encuentro que un complemento de vim llamado EasyMotion es bastante útil para navegar, si está familiarizado con vimperator o pentadactyl, EasyMotion simplemente devuelve el modo de sugerencia a vim. aquí hay una demostración animada y aquí está el video tutorial. Espero que te sea de ayuda.

Vincent
fuente
La ventaja de easymotion es que puede ir a cualquier parte de la pantalla con solo 3 pulsaciones.
Xavier T.
+1: EasyMotion es realmente un jetpack del movimiento de Vim. (por cierto, PreciseJump también. En realidad, EasyMotion es un hijo de PreciseJump)
Dmitry Frank
2
¿Cómo diablos consiguió el autor de EasyMotion esta línea de estado increíble en la demostración?
Cyrille
1
La 'línea de estado súper impresionante' es un complemento llamado 'Powerline'. Está aquí: vim.org/scripts/script.php?script_id=3881
DEzra
¿Podría actualizar la URL de demostración animada? ya no funciona
brauliobo
20

Hay un trillón de formas de moverse en vim, esta es una de sus áreas realmente fuertes. Yo uso {y }mucho, que se mueven hacia arriba y hacia abajo hasta la siguiente línea en blanco en esa dirección. %es útil para moverse hacia adelante y hacia atrás a un soporte coincidente (de cualquier tipo). Wy Bavanzar y retroceder con una "palabra".

Puede que valga la pena revisar la sección Desplazarse del manual de Vim.

Greg Hewgill
fuente
4
Probablemente también vale la pena mencionar la paginación hacia arriba y hacia abajo usando Ctl + U y Ctl + D, respectivamente.
Nick
10

¡vim tiene soporte para mouse! pruébalo (en tu .vimrc):

set mouse=a

nota al margen : como usuario de la pantalla, he descubierto que también necesito

set ttymouse=xterm2

para que esto funcione.

rgcb
fuente
4
Es bueno saberlo, sin embargo, seguiré buscando la navegación rápida perfecta sin la necesidad del mouse.
Helmut Granda
9

personalmente prefiero usar:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position
Siwei Shen 申思维
fuente
5

Con la opción relativenumber( : ayuda número relativo - incluida con Vim 7.3 ) puede llegar a la línea debajo de sus ojos con el movimiento a [count]ko [count]j, que le permite moverse en la línea actual con movimientos ftwebcomo los explicados por @romainl.

mMontu
fuente
Gran opcion Más rápido que easymotion.
Penghe Geng
5

Aparte de {, }, (, ), <number>cb, <number>cB, <number>cWy %, utilizo estas técnicas la navegación:

  • ciw, diw( ciW, diW). etc. para editar / eliminar rápidamente la palabra debajo del cursor (incluidos los caracteres que no son espacios)
  • ci(, ci"( ca(, ca"), etc. para editar rápidamente entre paréntesis, comillas (incluidos paréntesis, comillas). Lo mismo se aplica a d.
  • Marcas con letras MAYÚSCULAS para establecerlas globalmente (entre archivos) y de forma persistente (cuando el búfer está cerrado). Por ejemplo, mAcreará una marca global Aque estará disponible con 'Acomando (o `Apara respetar la columna).
  • gf para ir rápidamente al archivo debajo del cursor
  • f, t( F, T) para moverse al carácter, antes del carácter a la derecha (izquierda) (usar ;para repetir). Son particularmente útiles para los comandos dy c(se usan .para repetir).
  • ^]moverse a la etiqueta y ^Tretroceder.

Y muchas otras formas de moverse :)

Consulte esto para obtener más información: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PD: Para los usuarios de rails, hay un complemento rails-vim muy útil, es posible que también desee comprobarlo.

penkovsky
fuente
3

Este es un buen lugar para aprender los principales comandos de navegación, parte del poder / velocidad de vim proviene de la combinación de movimiento con acción, es decir cw-> cambiar palabra, d10j-> borrar 10 líneas hacia abajo, etc. También esto y esto son lecturas interesantes.

TI
fuente
2

Puede :set nohlsearchdesactivar el resaltado de sus caracteres de búsqueda.

Navego mucho usando ctags también.

richo
fuente
github.com/richoH/dotfiles/blob/master/vimrc Puede encontrar algunas otras cosas útiles allí.
richo
Gracias por la sugerencia, estaba revisando su vimrc y encontré su nota donde ha configurado para resaltar la línea cuando llegue a 80 caracteres al escribir correos electrónicos o documentos. ¿Por qué escribirías un correo electrónico en VIM? Puedo entender un documento para su uso personal, pero no estoy seguro de un correo electrónico.
Helmut Granda
Utilizo mutt + vim para leer y escribir la gran mayoría de mi correo electrónico. También utilizo el plugin It's all text para escribir una gran cantidad de contenido web en vim. Tengo activado el ajuste de palabras para los correos electrónicos, pero para los enlaces, etc., puede ser útil tener un recordatorio si no he formateado correctamente o si las citas anidadas son demasiado largas.
richo
0

Escribí un complemento con una navegación súper rápida en mente, se llama move-less:

https://github.com/anschnapp/move-less

Te permite buscar cómodamente el archivo del agujero desplazándote con ( h j k l-keys). No cambia la posición del cursor mientras se desplaza por el sitio del agujero (según el truco de plegado). Si aborta su búsqueda, estará justo donde comenzó.

Para una navegación súper rápida, la intención es usar mi complemento para obtener la posición de destino en la pantalla y luego saltar a la posición correcta a través de easymotion (que ya se recomendó en otra respuesta):

https://github.com/easymotion/vim-easymotion

Si combina ambos, incluso podría avanzar en el historial de saltos y puede saltar entre su origen y destino de destino simplemente a través de <c-o>y <c-i>.

chasquido
fuente