Vim: (dávkové) spouštění ex příkazů

Když jsem před časem zmigroval blog na Hugo, bylo to celkem jednoduché — tehdejší verze Hugo bez problémů požrala HTML čurbes z Bloggeru a tak s tím nebylo moc starostí.

Bohužel, od verze v0.60.0 změnil Hugo Markdown knihovnu — z Blackfriday na Goldmark a mě se přestaly renderovat všechny nevyčištěné stránky (tedy ty, nepřevedené na čistý Markdown). 😱 😬

Asi by se to dalo vyřešit přes konfiguraci, nastavením méně striktního renderování, ale rozhodl jsem se na to jít z gruntu a všechen ten HTML balast odstranit. To je hodně práce. A protože tenhle blog píšu ve Vimu, tak jsem čistil… ve Vimu. 😎

Okno s historií příkazů

Přítelem každého Vim-uchyláka je bravurní znalost (Vim-flavored) regexů. A když vás po čase přestane bavit je psát zpaměti, začnete je hledat v historii.

Knížce Practical Vim vděčím mimo jiné za to, že vím, k čemu je ten příkaz, který mě vždycky přiváděl k šílenství, když jsem chtěl zavřít buffer, a omylem jsem se překlepl, takže jsem místo :q napsal q:

Vim buffer s otevřeným command-line oknem s historií příkazů

Vim buffer s otevřeným command-line oknem s historií příkazů

Příkazy q:, q/ a q? totiž otevřou command-line window s načtenou historií :, či / příkazů. Výhodou je, že se v tom okně můžete chovat jako ve Vimu. 🤓 Můžete v něm vyhledávat, kopírovat, editovat… A znovu spouštět dané příkazy.

Spuštění příkazů ze souboru

Vyhledání a spuštění nějakého složitější příkazu je sice fajn, ale jsou tu dva problémy:

  • Jednak jde o historii a ta má nějaký limit (třeba já mám defaultní history=200), takže po čase může příkaz zmizet.
  • Pokud zpracovávám více souborů, je to repetitivní a chtělo by to nějak naskriptovat. 🤔

Ke slovu tak přichází příkaz source, který načte sadu příkazů ze souboru a postupně je provede.

Pro potřeby čištění blogu jsem si vytvořil následující sadu příkazů:

Teď stačí zadat v editoru tenhle příkaz a mám vyčištěno!

:source srcipts/html-to-markdown.vim

Fakt je to tak jednoduchý?

Jasně, je. Pořeší se tím všechno, co se dá zvládnout regulárním výrazy. Samozřejmě, my, co jsme měli na škole dva semestry předmětu Regulární a bezkontextové jazyky a není nám neznámá Chomského hierarchie jazyků 🤓 víme, že některé problémy se regexem vyřešit nedají. Ale na čištění HTML to bohatě stačí… (tak z 95 % 😈).

Happy sourcing!

Související články

Externí odkazy