2 de Febrero, 2007

vi es el $EDITOR

En el trabajo se empeñan en seguir ignorando la realidad: vi es el editor, cualquier reemplazo (que no sea EMACS) es simplemente insuficiente ;).

Ya comenté el otro día que uso mail(1) para leer el correo en el servidor, aunque los correos los escribo realmente con vi (en la entrada de un mensaje, el comando ~v).

Vamos a repasar un poco por encima algunas características básicas que, por desconocimiento, suelen limitar a la gente cuando emplea este editor de textos tan útil administrando sistemas.

En primer lugar hay que saber usar marcadores (markers), porque sin ellos no podremos sacar partido a la mayoría de las operaciones, por ejemplo, de copia & corta.

Los marcadores se ponen en lineas ejecutando en modo comando: mx, donde la x es el nombre de la marca. Podemos usar cualquier caracter como marca, y las operaciones que podemos hacer son: 'x para desplazarnos al primer caracter no blanco de la linea con la marca x, y `x para ir al comiendo de la linea.

Si tenemos en cuenta que a las operaciones de cortar (d) y copiar (y) les podemos indicar un rango, ya somos capaces de hacer la mayoría de las cosas que la gente no suele saber hacer con vi :).

Por ejemplo: no situamos en la linea donde comienza el texto que queremos copiar y pulsamos ma. Nos vamos a la última linea de nuestro objetivo y pulsamos 'ay (el editor nos llevará a la linea de la marca). Nos vamos a donde queremos pegar, y pulsamos P (pegamos el buffer por defecto).

Si no decimos nada, el editor usará siempre el mismo buffer para estas operaciones, pero podemos usar otros con "x, siendo x el nombre del buffer.

Otro ejemplo, supongamos el texto:

eran...
uno
dos
tres

Ejecutamos estando en la primera linea "aY (usa el buffer a para copiar). Nos situamos en la segunda y ponemos una marca ma, y copiamos una linea más abajo con "by'a (usa el buffer b para copiar desde el marcador a). En este punto tenemos dos buffer con texto: a y b.

Vamos al final del fichero (con G, es lo suyo :D) y pegamos los dos: "ap"bp, obteniendo lo siguiente:

eran...
uno
dos
tres
eran...
uno
dos

En verde vemos el contenido del buffer a y en azul el del buffer b. Veamos si es cierto con :display buffers (pulsamos intro, que es un comando de ex):

********** b (line mode)
uno
dos
********** a (line mode)
eran...

Entiendo que el problema de vi es su curva de aprendizaje, que es demasiado parecida a una recta vertical :D, pero cuando nos hacemos con el funcionamiento básico, resulta mucho más sencillo realizar tareas avanzadas.

A ver cuando tengo un rato y explico como emplear combinaciones de teclas sin uso en el editor para realizar tareas repetitivas (formatear texto, citar, des-citar, esas cosas que hacemos cuando escribimos correos electrónicos :P).

Ah, y para programar también vale ;).

Anotación por Juan J. Martínez, clasificada en: unix.

Hay 12 comentarios

Gravatar

Ver a alguien con experiencia usar el vim de forma fluida es impresionante. Es que la envidia te empieza a corroer y aunque la curva de aprendizaje sea más bien pared, lo obtenido lo vale.

Yo estoy en proceso de aprendizaje... pero aún me queda. Lo importante es no rendirse :D

Salu2!

por Ed, en 2007-02-02 19:29:23

Gravatar

Recuerdo que nada más llegar vi a Dani hacer desaparecer una palabra entre dos marcas de un XML pulsando dos teclas, dejando el cursor listo para escribir... que flipé. ¡Tío! ¿cómo has hecho eso? :D

por Juanjo, en 2007-02-02 20:48:22

Gravatar

Buena entrada.

Lo de los buffers está bién, pero me olvido de lo que contienen si tengo más de uno (el portapapeles de jugete de windows me ha hecho mucho daño, y mi memoria está a un paso de ser la del prota de Memento)... a decir verdad, con uno sólo buffer también me olvido.

Por otro lado, como prefiero el modo visual (V) para seleccionar rangos, tu secuencia:

gg"aYjmaj"by'aG"ap"bp

me quedaría más breve:

ggVyGp''jVjyGp

Aunque para hacer scripts reconozco que poder manejar y tener identificados varios buffers es bastante útil.

PD: Que feas quedan las instrucciones puestas así seguidas :)

por maeghith, en 2007-02-02 21:12:43

Gravatar

Me temo que en vi no hay modo visual :D

Desde luego que todo lo que se puede hacer con vi funciona en vim, pero al contrario no pasa ;)

por Juanjo, en 2007-02-02 21:43:44

Gravatar

Cuando empecé en linux usaba nano, me gustaba mucho y era fácil de usar, pero en un examen de scripts me la lío. Desde entonces uso vi, es genial, tan fácil como el nano pero sin temor a que te desordene el código XD

Sl2!

por gorrixe, en 2007-02-03 12:14:53

Gravatar

hmmm... vaya, en la ayuda del vim (en :he visual o en :he 04.4) no dice que el modo visual sea incompatible con vi (en otras secciones sí pone algo como "not in Vi" o algo así)

bueno es saberlo

por maeghith, en 2007-02-03 15:47:22

Gravatar

Uhmmm Vi, lo dejé por imposible al tratar de usarlo. Es que de entrada... buffff... :(

por corsaria, en 2007-02-03 17:38:16

Gravatar

Una gran verdad.. VI es el EDITOR.

Uso VIM desde hace un porrón de años en el desarrollo de aplicaciones web PHP y en sistemas BSD....

.. yo con VIM y toda la empresa con Dreamweavers, Zends... casi siempre te has de convertir en un auténtico comercial del VIM para justificar su uso.. a la gente q no lo acepta (los Guindows users) lo critican.

Nótese MUCHO la diferencia entre el VI a pelo, o el NVI (del BSD) o el super VIM... muchos usuarios linux sólo disponen del VIM aunque ejecutado en modo compatibilidad... se confunde con frecuencia pero no es lo mismo.

Para el desarrollo de software con decenas de miles de lineas.. VIM vale (tienes infinidad d plugins, colores, etc.), el VI a pelo es más durillo.

Saludos.

por Oriol, en 2007-02-03 18:19:49

Gravatar

Desde aquella mini-vi-con que hiciste en verano lo veo con otros ojos. He de decir que el hábito es duro, pero somos animales de costumbres. Más tips de vi would be appreciated ;).

por r0sk, en 2007-02-05 12:44:01

Gravatar

La verdad es que me da pereza explicar estas cosas, porque está todo muy bien documentado. De hecho, con una refcard de esas que alguna vez he comentado por aquí, suele ser más que suficiente.

Por otra parte, siempre es más fácil de entender y se quedan mejor las cosas cuando las lees explicadas y en castellano... así que igual me animo. Pensaba explicar las teclas rápidas que uso para escribir correos, así que igual amplio un poco y repaso algunas cosas que me son útiles en el día a día.

por Juanjo, en 2007-02-05 14:11:02

Gravatar

recién descubro este blog y quiero felicitarlos por la iniciativa de defender y popularizar el vi/m, una herramienta genial que permitiría trabajar infinitamente mejor a tanta gente si sólo se tomaran el trabajo de quitarse los bloqueos mentales y se animaran a aprenderlo.

por mi parte acoto que siempre me dio fiaca aprender a usar el Yank (cut and paste de vi) así que me las arreglo bien de este modo: después de marcar el bloque de interés (en mi nomenclatura la primera línea es ma y la última mz) voy a donde quiero pegar y hago:

:'a,'zm. (mover)
o bien:
:'a,'zt. (copiar)
o bien si ya sé que quiero mover a la línea 65, parado desde cualquier lado:
:'a,'zm65 (t en lugar de m si quiero copiar)
o bien para mover al principio del archivo:
:'a,'zm0
o bien para mover al final:
:'a,'zm$
abrazos para todos!

por Ricardo, en 2007-02-05 20:53:27

Gravatar

Buena referencia :)

Pero... esos son comandos de ex, de los que quiero hablar cuando explique como programar acciones complejas para ejecutar con teclas rápidas desde vi.

En realidad si nos ponemos siempre habrá alguien que sepa hacer algo mágicamente que no sabemos hacer o llevamos a cabo con muchas más pulsaciones de teclas :P

por Juanjo, en 2007-02-05 21:10:24

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: