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:
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!