logo

WikiJuanan: MacrosVim ...

Inicio | Indice De Paginas | Ultimas Modificaciones | Ultimos Commentarios | Usuarios | Registrarse | Conectar:  Contraseña:  

Editor Vim


Es copia de: http://www.lugmen.org.ar/pipermail/lug-list/2000-November/006635.html


Nota preliminar: los teclazos/comandos que se deben apretar se encuentran entre comitas superiores (') cuando hay texto explicativo aledaño. No tienen nada cuando los he puesto en
lineas aparte. Obviamente las comitas no se deben tipear. <ENTER> y <ESC> son las teclas correspondientes y *no* la secuencia: <, E, N, T, E, R, >


Sugerencia: leer este mail sin ir probando a la vez (en otra consola por ejemplo) el funcionamiento de lo explicado será, cuando menos, aburrido e inútil. (la sugerencia es que sigan los pasos a medida que leen :)


Soy un poco fanático de vi/vim, sin embargo no soy lo que se dice un gurú. Pero ayer, editando un archivo, descubrí este tip que tal vez a más de uno le genere una sonrisa.


Me ocurre cada tanto, cuando trabajo con vim, que apreto sin querer la letra 'q' y me aparece un cartelito en la barra de estado que dice “--recording”. Cada vez que me aparecía me decía: «esto debe ser para grabar macros, algún día veré como es la onda”. Pero no pasaba de allí la cosa.


Ayer generé un archivo con lineas parecidas a las que muestro: (eran varias, más de las que muestro)


lynx -source http://bigempire.com/filthy=20
lynx -source http://everything2.com=20
lynx -source http://www.oldmanmurray.com=20


y deseaba llegar a algo así:


lynx -source http://bigempire.com/filthy > bigempire &
lynx -source http://everything2.com > everything2.html &
lynx -source http://www.oldmanmurray.com > oldmanmurray.html &


En cuanto hice la primera linea, me di cuenta que iba a ser un trabajo pesado (recuerden que estoy mostrando sólo un fragmento de la tarea, tenía varias lineas más por delante), y no quería que fuese así, entonces recordé los de las macros y me dije: “es el momento de aprender a usarlas”.


La onda es la siguiente: cuando apretamos 'q' seguido de una letra [a-zA-Z], se guardan en el registro que indica la letra todo lo que tipeamos. Para terminar de grabar apretamos 'q' nuevamente. Y luego para ejecutar la macro apretamos '@' seguido de la letra que contiene nuestra macro.


Ejemplos:
'qa' para iniciar la grabación y guardarla en el registro a alguna secuencia de ediciones con cualquier grado de complejidad
'q' para terminar la grabación
'@a' para ejecutar la macro grabada en el registro a


Ahora veamos que tendría que hacer para componer cada linea del texto de ejemplo del principio:


para llevar
lynx -source http://bigempire.com/filthy=20
hasta
lynx -source http://bigempire.com/filthy > bigempire &
debería:
– posicionarme en la 'b' de bigempire
– hacer 'yw' para copiar la palabra al bufer
– hacer 'A' para ponerme en modo inserción al final de la linea
– tipear ' >'
– apretar <ESC> para ir a modo comando (aún no me aprendo las secuencias para insertar desde el bufer en modo inserción)
– hacer 'p' para copiar desde el bufer
– hacer 'A' para finalizar tipeando '&' en modo inserción


Esto explicado con palabras parece lento, pero es bastante rápido. Sin embargo cuando se trata de hacerlo muchas veces, dan ganas de hacerlo más rápido!


Debido a que la cadena que usaré para la redirección, que saco del URL es distinta cada vez es que decido dejar los dos primeros pasos fuera de la macro, ya que eso es distinto para cada linea. Si fuese posible automatizar esto, por ejemplo, que la palabra a usar se encontrase siempre en una misma posición relativa, entonces haríamos que todo fuese macro (más de esto enseguida). Pero sigamos con esto.


– me aseguro de estar en modo comando con <ESC>
– me posiciono en la palabra que quiero copiar al bufer
– hago 'yw'
– hago 'qa' aquí comienza el grabado en el registro a de

todo lo que apriete de aquí en más

– realizo la secuencia de edición antes descripta
– finalizo con 'q'


De aquí en más, para realizar lo mismo en las restantes lineas tan sólo debo copiar la palabra (la parte que varía de linea a linea), pero luego tan sólo debo hacer '@a' y vualá! se ejecuta toda la secuencia de edición solita.


«Tanto lío por un par de teclazos! Dejame con el edit de DOS»


Imaginemos entonces una secuencia un poco más larga:


para llevar

lynx -source http://bigempire.com/filthy=20

a (está cortado pero es todo una sola linea)
lynx -source http://bigempire.com/filthy | mail -s 'HTMLSOURCE-bigempire' fcanizo@unsl.edu.ar


Ahora se pone un poquitín más interesante, verdad?


Imaginemos que la cosa es más automatizable:


Tenemos URLs con un mismo patrón, y queremos usar una parte de él. Por ejemplo, tenemos 100 lineas de este tipo:


http://www.somewhere.org/archivo_copado.html


Y queremos generar un script que nos baje los documentos y nos los envíe por mail (donde nuestro procmail se encargará de ubicarlos como archivos html en el lugar apropiado para
mirarlos más tarde con un simple 'lynx localhost')


Entonces la idea es que estamos en alguna posición de la
linea, no importa cual. Primero seteo la variable textwidth=20
a cero para que no interfiera con mi edición el wrapeado
automático:


:set textwidth=0


Ya podemos comenzar con nuestra macro:


'qa' en modo comando para comenzar a grabar en el registro
a, luego la siguiente cadena de teclazos y texto:=20


$?/<ENTER>ly$A | mail -s 'HTMLSOURCE-<ESC>pA'
fcanizo@unsl.edu.ar<ESC>


(no olvidar sacar el 'Bloquear Mayúculas' al terminar de
tipear HTMLSOURCE)
(el wrap me lo dejó en dos lineas aquí en el mail, pero es
una sola)
finalmente 'q' para terminar la grabación. Y ya estamos
listos para hacer maravillas.


Como la primera linea quedó lista al grabar la macro, sólo
nos quedan 99 lineas aún por editar, no posicionamos en la
primera de ellas y hacemos:


99@a


Boom! (que me hablen de word después de esto!)
Exactamente 5 teclazos para resolver 99 lineas de edición.
Cool.


Habría que terminar la edición con algo así (para que el
script funcione!)


:%s/^/lynx -source/


Bueno, espero que les haya gustado y sobre todo que se
entienda. El mecanismo de las macros es bien fácil. Tal vez
los ejemplos no son de lo mejor, pero quería dar una idea de
como usar las macros.


A propósito, para usar el comando '@' no es necesario grabar
algo con 'q', pueden hacer lo siguiente:


Ejemplo simple pero ilustrativo: borrar las tres primeras
palabras de una linea.


Escriben en modo inserción:


03dw


Luego hacen:


«cyy


y ya tienen lo necesario grabado en el registro c, ahora
sólo tienen que ir a las lineas que quieran y hacen:


@c


Y una última cosa, a veces me falla el tema de las comillas
cuando quiero copiar algo en un registro, para evitar malas
interpretaciones, las copias las hago en modo comando con:


:ya <registro>


Eso es todo.

No hay archivos en esta página. [Enseñar archivos/formulario]
No hay comentarios en esta pagina. [Enseñar comentarios/formulario]