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
- /main busca la palabra «main» ya que quiero el contendido dentro de un tag
<div id="main">...</div>
- yit es yank inner tag, o sea copiar el contenido del tag (ojo, no a Ctrl+C sino al buffer de vim)
- gg va al principio del archivo
- «_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.
- 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