Mejorando en Vim [cerrado]

116

He estado usando Vim durante bastante tiempo, pero estoy en un nivel en el que uso el modo de inserción la mayor parte del tiempo, y todavía uso las teclas de flecha para moverme (!).

Siento que no estoy obteniendo lo mejor de mi encantador editor, particularmente en lo que respecta a la navegación (especialmente el código), copiar y pegar y hacer otras manipulaciones del código existente. (aunque me siento bastante cómodo con patrones complicados de búsqueda / reemplazo).

  • ¿Cómo debo aprender más?
  • ¿Qué recursos recomendaría la gente?
James
fuente
8
¿Qué tiene de malo usar las teclas de flecha para moverse? Eso es lo que son para !
Vilx-
39
@Vilx, ¡no te mueves con las teclas de flecha ni siquiera en los juegos de acción de computadora ! Por no hablar de los editores de texto ...
P Shved el
6
@Vilx: Las teclas de flecha en un teclado están en un lugar horriblemente inconveniente para cualquier tipo de navegación. Es por eso que el canon en ViM es usar HJKL, tal como usaría WASD en un juego en primera persona.
Will Vousden
4
El WASD está ahí porque es más fácil de usar con la mano izquierda, ya que la derecha controla el mouse. Los zurdos usan las flechas. Y HJKL es tan contrario a la intuición. ¿Cuál se mueve a dónde?
Vilx-
8
Bueno, creo que no se trata de "flechas contra hjkl", sino de "movimiento del cursor contra objetos de texto".
Matteo Riva

Respuestas:

78

"¿Por qué, oh POR QUÉ, esos #? @! Chiflados usan vi?" es una buena introducción a "la forma Vim", especialmente sobre los objetos de texto que son una de las características más definitorias de Vim.

Matteo Riva
fuente
3
Como beneficio adicional, hay una bonita hoja de trucos gráfica (vinculada al final del artículo).
Csaba_H
Parece que no puedo acceder a ese enlace. Ni siquiera con rizo. ¿Alguien puede confirmar?
H.Rabiee
66

Aquí hay algunos screencasts increíbles que deberían darle una idea de qué aprender a continuación. También hay videos para temas intermedios y avanzados, pero los novatos son de hecho los más importantes.

Además, cuando sentí que me estaba estancando y que realmente no estaba aprendiendo "al estilo Vim", elegí desactivar las teclas de flecha tanto en el modo normal como en el de inserción. Esto te obliga a usar ESC para llegar a alguna parte y te hace pensar más como Vim. Al final, volví a habilitar las teclas de flecha en el modo de inserción, pero casi nunca las uso. En la mayoría de los casos, existen mejores formas de moverse.

map <up> <nop>
map <down> <nop>
map <left> <nop>
map <right> <nop>

Y especialmente

imap <up> <nop>
imap <down> <nop>
imap <left> <nop>
imap <right> <nop>
Sarah
fuente
5
Me gusta la idea de desactivar las teclas de flecha, es una buena manera de obligarse a dejar de usarlas.
Idan K
1
Me funcionó muy bien, pero los primeros días fueron extremadamente frustrantes. Sin embargo, una vez que te acostumbres y tengas el hábito de moverte DEMASIADO en el modo de inserción, te recomiendo volver a habilitar los imaps.
Sarah
Estos screencasts fueron increíbles. Gracias por señalar.
Mert Nuhoglu
2
Deshabilitar las teclas de flecha es una idea INCREÍBLE, lo estoy haciendo ahora mismo.
gorsky
La desactivación de las teclas de flecha se basa en la suposición de que las teclas de flecha están más apartadas que hjkl. Mejor es tener un mejor teclado. Utilizo Kinesis Advantage. Incluso si estuviera usando un teclado estándar, hjkl todavía no tiene sentido ya que uso dvorak. Lo que quiero decir es: el punto no es "no use las teclas de flecha", el punto es "Use los medios más eficientes y no eluda las ganancias de eficiencia debido a una curva de aprendizaje".
Expiación limitada
23
  1. escriba vimtutoren la línea de comando
  2. entra en vim, escribe: ayuda o <F1>
  3. suscribirse a la lista de correo
  4. documentos oficiales de vim
ghostdog74
fuente
1
Lo único que no había considerado fue unirme a la lista de correo: hecho ahora :)
James
1
Es un buen lugar para obtener ayuda y practicar su habilidad visual resolviendo los problemas de otras personas.
ghostdog74
1
+1 para vimtutor: una forma excelente de introducir vim en la memoria muscular.
Hamish Downer
16

Dos consejos más:

  • Utilice Vim para editar todo (correo electrónico, formularios web, código, ...). Cuando algo se siente lento, probablemente haya una forma más rápida de hacerlo. :helpgrepes tu amigo.

  • Dirígete a http://vimgolf.com/ y compite. De esa forma he aprendido muchos trucos y consejos. [ Descargo de responsabilidad : No se acepta responsabilidad por los largos períodos de tiempo que "desaparecen" mientras se compite en VimGolf ].

Johnsyweb
fuente
2
Genial, ¡no sabía nada de vimgolf!
James
1
@Autopulated: se ha añadido un descargo de responsabilidad.
Johnsyweb
2
@Johnsyweb: Realmente quiero poder usar vim para todo, pero ¿cómo? Obtener un clon de vim adecuado dentro de cada formulario web sería ideal, porque todos los complementos del navegador que he encontrado generalmente solo implementan un pequeño subconjunto aleatorio de características de vim y reasignan combinaciones de teclas para adaptarse al hecho de que el navegador todavía necesita acceso a determinadas asignaciones de teclas.
Conrad.Dean
10

Así es como aprendí Vim (y muchas otras cosas). Es bastante sencillo.

Examine los documentos de ayuda y busque un comando para algo que hace todo el tiempo. Eliminar una palabra completa, por ejemplo. Asegúrese de recordar esto.

Ahora, la próxima vez que se encuentre presionando 'xxxxx' para eliminar una palabra, deténgase, vuelva a colocarla y use el nuevo comando. Búscalo si es necesario. Entonces, en lugar de presionar 'xxxxxx', regrese y presione 'dw'.

Haga esto una y otra vez, será lento al principio pero eventualmente se mantendrá.

Una vez que tenga ese comando, comience en la parte superior. Encuentra otro comando para una acción que haces todo el tiempo ...

Te sorprendería lo rápido que puedes aprender nuevos comandos y técnicas de esta manera.

Dennis Hostetler
fuente
7

Reasignar / deshabilitar las teclas de flecha como se ha sugerido es una excelente manera de obligarse a no usarlas.

Otra cosa a considerar: si presionar Esc en su teclado es incómodo, es posible que desee reasignar Caps Lock a Esc en su sistema operativo. Para mí, este fue un paso muy útil, ya que Esc es un alcance incómodo en mi KB y ese fue otro obstáculo que me mantuvo en modo Insertar (ya que era difícil salir). Tener Esc en Caps Lock lo convierte en un alcance pequeño y saltar dentro y fuera del modo Insertar es muy rápido.

Para aprender cosas avanzadas en Vim, el mejor recurso es: ayuda, pero para aprender lo básico solo necesita hacerlo; es la memoria muscular más que nada. Dices que sabes buscar. Úselo conscientemente como una herramienta de navegación. Las búsquedas [/,?] Y las búsquedas basadas en caracteres en línea [f, F, t, T] son ​​algunas de las herramientas clave de navegación de Vim. Solo utilícelos; combinado con las teclas de cursor desactivadas, navegará solo con la memoria muscular en poco tiempo.

Objetos de texto. Fácilmente una de las mejores características del editor. Esta es la otra cosa para practicar inmediatamente de forma consciente. Cosas como 'yiw', 'dit', etc. son tan poderosas y rápidas; aprender y hacer uso de ellos solo te hará sentir como un usuario de Vim.

Una vez que tenga los objetos de texto y la navegación básica hacia abajo, entonces es hora de pasar a leer y aprender de la ayuda con regularidad y explorar la web en busca de complementos increíbles. En serio, puedes usar Vim durante años y tener un "¡ah, ja!" momento tropezar accidentalmente con algún dato oscuro en la ayuda que nunca había conocido.

números1311407
fuente
En lugar de reasignar a Bloq Mayús, sugeriría Ctrl-C. Esto es fácil de escribir y bastante familiar para los usuarios de Linux.
BandGap
6

Vea este hilo: ¿Cuál es su atajo más productivo con Vim?

Especialmente la primera respuesta.

Konrad Garus
fuente
3
Como autor de la "primera" respuesta, tengo que decir, con toda justicia, que no es necesariamente la mejor guía para mejorar en general su dominio del editor. Abarca mucho terreno sobre lo que se puede hacer con vi cuando lo considera un lenguaje para expresar las formas en que desea manipular el texto, su pantalla / terminal y el entorno del propio editor. Sin embargo, muchas de las cosas que contiene son bastante avanzadas.
Jim Dennis
1
¡No he aprendido tanto leyendo esa respuesta que no creo que nunca hubiera aprendido leyendo documentación!
James
3

¿Cómo debo aprender más?

Lea el manual de vim por completo (escriba :h; puede navegar desde allí). Así es como llegas a conocer todos los movimientos y comandos. Eso es más útil si ya conoce los conceptos básicos y desea mejorar.

¿Qué recursos recomendaría la gente?

vim.org, revise los scripts vim más populares . Verifique las fuentes de ellos si encuentra algo de interés. O simplemente instálalos y disfruta. Ese sitio incluye muchos enlaces a scripts que ayudan a navegar por el código fuente en diferentes idiomas; y es relativamente fácil encontrarlos allí.

StackOverflow.com también podría ser de ayuda .

P Shved
fuente
3

Hice este juego para ayudar a mi sobrino a aprender, pero solo funciona en Firefox y Chrome>. < http://kikuchiyo.org

Por ahora, solo se ocupa del movimiento y la entrada al modo de inserción. La versión beta te permite atacar a los enemigos con un sable de luz, 'i' a la izquierda y 'a' a la derecha: P

Sigue intentando aprender Vim, ¡vale la pena el esfuerzo!

:)

kikuchiyo
fuente
¡Eso sí que es una muy buena idea!
James
Actualización: el sitio está ahora en kikuchiyos-vim-game.herokuapp.com .
kikuchiyo
2

Todavía uso las teclas de flecha para moverme (!).

No veo ningún problema con esto.

Francamente, ¿cuál es la probabilidad de que tenga que usar vim y un teclado que carece de teclas de flecha?

Ya sabes, la mayoría de la gente usa vim porque hace el trabajo (bueno, porque lo dominaron a un nivel cuando hace el trabajo por ellos), no por ser elitistas (como no usar las teclas de flecha).

Un par de consejos para mejorar su conocimiento de vim:

  • Abra periódicamente la ayuda de vim en un lugar aleatorio y lea acerca de una característica distinta aleatoria. Te llevará un par de minutos. Es posible que no utilice esta función durante los próximos X años. Pero si tiene suerte, se encontrará en una situación en la que verá que puede aplicar sus conocimientos sobre esa función para lograr una determinada tarea. Volverá a abrir la ayuda para refrescar su memoria. Después de usar la función en la práctica un par de veces, se mantendrá. En este punto, se mejorará su conocimiento de vim.
  • use: helpgrep para profundizar en lugares aleatorios de documentación. Si necesita hacer algo y encuentra el lugar que lo explica en los documentos, no se detenga allí. Lea el fragmento de documento una vez más. Encuentra las palabras clave. Para cada palabra clave, use: helpgrep palabra clave para descubrir los enlaces lógicos con otras partes de la documentación de vim.
Alex_coder
fuente
Supongo que el problema que tengo con sólo leer la documentación es que me parece que no aprendo cosas de manera muy eficaz sin tener que hacer ellos.
James
1
Usar las teclas del cursor para mover el cursor en distancias cortas puede ser tan eficiente como usar las teclas [h], [j], [k], [l] ... si sus dedos están cerca de ellos por alguna otra razón. Usar cualquier movimiento lineal del cursor es horrible para más de unas pocas columnas o líneas de movimiento. Por lo general, es mejor pensar en lo que está buscando y expresarlo directamente en vi usando / o? comandos y expresiones regulares. ¿Último texto cerca de foo? G? Foo [Enter] (seis pulsaciones de tecla). Primera línea con "barra ... algo ... ¿golpe? 1G / barra. * Bang [Enter] (alrededor de una docena de pulsaciones de teclas) ... y así sucesivamente.
Jim Dennis
Aunque las teclas de flecha son probablemente más eficientes que alcanzar el mouse, si escribe utilizando las teclas de la fila de inicio para reagrupar sus manos después de escribir una secuencia de caracteres, entonces no es necesario ningún movimiento para ingresar una de las teclas de movimiento básicas de 'j', 'k', 'l', y un ligero 'twitch' hacia la izquierda para obtener la tecla 'h'. Si hace las cosas de la manera Vim, sus manos siempre deben estar más cerca de las teclas de la fila de inicio que de las teclas de flecha. Sigue practicando y lo conseguirás. :)
kikuchiyo
2

la forma en que dejé de usar las teclas de flecha no las deshabilitaba (todavía las uso en el modo Insertar) pero si lo piensas, si quieres ir a la derecha, usa tu dedo meñique, que es la ltecla, ve a la izquierda, el dedo índice, la htecla, & anular el dedo hacia arriba ("hacer sonar") la ktecla y "bajar" la jtecla.

Entonces, el primero de los cuatro dígitos de su mano (olvídese del pulgar), el índice uno está en el extremo izquierdo y el meñique está en el extremo derecho. Utilice la expresión "ring up" como en una llamada telefónica para arriba con el dedo anular y el dedo medio no tiene otro lugar adonde ir más que hacia abajo.

También me ayuda mucho olvidar el nombre de las teclas (h, j, k, l). No hay un buen mnemónico para recordarlos de esa manera que he encontrado y tampoco hay demasiados mapeos usando esas teclas.

Phildobbin
fuente