Bien, el título es bastante explicativo, así es que al hueso la siguiente sucesión de comandos hace éso

/main
yit
gg
"_dG
p
  1. /main busca la palabra «main» ya que quiero el contendido dentro de un tag
    <div id="main">...</div>
  2. yit es yank inner tag, o sea copiar el contenido del tag (ojo, no a Ctrl+C sino al buffer de vim)
  3. gg va al principio del archivo
  4. «_dG : dG borra todo desde la posición actual. Se le añade «_ porque así no copia lo que borró en el buffer, sobrescribiendo lo que copiamos antes.
  5. p pega lo que copiamos

Así queda solo el contenido del tag en el archivo.

Para grabarlo como macro, se le da q+x (x es una letra cualquiera, el nombre de la macro), se escribe la secuencia de comandos y se termina de grabar con otro q. Después para invocar la macro basta con apretar @x.


Ahora, si quisiera llamar esta macro desde la línea de comandos, en teoría podría hacer algo así como

vim -c @x -c wq archivo.html

o sea pasarle la macro y un guardado por parámetro.

Lamentablemente lo anterior no funciona porque mis comandos no son exec válido…

Se ha detectado un error al procesar command line:
E492: No es una orden del editor: yitgg"_dGp

Ésto se debe a que no está en modo «normal», así es que ésto sí funciona

vim -c ":normal @x" -c wq archivo.html

Con lo cual puedo iterar por todos los archivos de una página y extraerle su contenido para hacerme un libro (de Git)

for i in *.html;do vim -c ":normal @z" -c wq $i; done
Este sitio utiliza cookies.    Leer más