Skládání čili folding
Skládání se objevilo v šesté verzi programu. Jeho cílem je usnadnit editaci rozsáhlých souborů, kdy již jen samotné pohyby po textu mohou stát spoustu času. Skládání funguje podobně, jako když máte text vytištěný na papíře, který složíte tak, že část textu se skryje ve skladu. Viditelná část se tak zkrátí:
Podobně se chová vim: část textu zmizí a je nahrazena upozorněním „zde je složeno N řádků, z nichž první obsahuje XYZ“. Skryté řádky pochopitelně zůstávají v souboru, jen momentálně nejsou zobrazeny.
Ruční skládání a rozkládání
Příkazy pro zacházení se sklady začínají klávesou z
(mnemotechnika: připomíná složený papír z profilu).
Sklad vytvoříte kombinací zf
(f jako fold). Za ním
následuje pohybový příkaz – řádky od aktuálního až po cílový budou
složeny. Místo nich se objeví jediný řádek ve tvaru
+--- 10 řádků:Text prvního z nich
Oznamuje, kolik řádků se za ním skrývá a jako vodítko k jejich obsahu
zobrazuje text prvního z nich. Skládáte-li snadno definovatelný blok textu,
poslouží vám výše zmíněná kombinace zf
následovaná
pohybovým příkazem či definicí objektu. Například zfap
složí aktuální odstavec. Složitější část textu
můžete nejprve vyznačit ve vizuálním režimu a následně
stisknout zf
, čímž se složí všechny vyznačené
řádky.
Sklady lze vnořovat. Čili můžete složit část textu, která již obsahuje sklady. Zůstanou zachovány a po pozdějším rozložení nadřízeného skladu se objeví ve stavu, v němž byly před složením.
O rozložení skladu pod kurzorem se postará kombinace zo
(o jako open). I po rozložení si ale vim
pamatuje, že zde byl sklad a umožní vám jej znovu složit pomocí
zc
(c jako close). Čili zf
definuje nový sklad (a složí jej), zatímco zc
pouze vyhledá nejbližší existující rozložený sklad
obsahující kurzor a složí jej. Definici skladu můžete odstranit kombinací zd
(d jako delete).
Otevírat a zavírat sklady lze i skupinově. Kombinace zr
(r jako reduce) rozevře jednu úroveň skladů v celém
dokumentu, zatímco zm
(m jako more) naopak jednu
úroveň plošně zavře. O rozevření úplně všech skladů v celém dokumentu v
libovolné hloubce zanoření se postará zR
, zatímco
o komplatní pozavírání zM
.
Práce se sklady
Pokud sklad zkopírujete či vymažete, týká se operace všech jeho řádků. Takže
například zkopírování jednoho řádku (příkaz yy
)
provedené na řádku se složeným skladem ve skutečnosti zkopíruje do vyrovnávací
paměti všechny řádky daného skladu.
Při hledání řetězce se nemusíte obávat, že o něco přijdete. vim hledá i uvnitř skladů a pokud najde, automaticky dotyčný sklad rozevře a zobrazí nalezený výskyt.
Udržet přehled o existujících skladech nemusí být právě jednoduché. Vaši
situaci usnadňuje proměnná foldcolumn
. Pokud jí
nastavíte nenulovou hodnotu – například :set foldcolumn=5
– zobrazí nalevo od
textu příslušný počet sloupců, v nichž pseudograficky znázorňuje existující
sklady. Sklad je vždy zahájen znakem „–“, pod nímž následují
svislé čáry až po jeho konec. Vnořené sklady se zobrazují v dalších
sloupcích.
![[text se zobrazenými sklady]](foldcolumn.png)
Klepnutím myší na znaky „+“ a „–“ v levé části okna můžete otevírat a zavírat jednotlivé sklady.
Automatizace
Pokud vám to vyhovuje, můžete vim konfigurovat tak, aby sklady otevíral a zavíral automaticky. Slouží k tomu dvojice voleb
:set foldopen=all
:set foldclose=all
První z nich zajistí, že sklad se automaticky otevře, když na něj přemístíte
kurzor. Druhá naopak sklady automaticky zavírá, jakmile je kurzor opustí.
Přesněji řečeno jejich hodnotou určujete seznam příkazů, jež vyvolají
otevření/zavření skladu, nicméně hodnota all
je asi
nejzajímavější.
Automatizovat lze i definici skladů. Slouží k tomu volba foldmethod
. Její standardní hodnotou je manual
, což znamená, že sklady si uživatel definuje
ručně. Zajímavé automatické varianty představují :set foldmethod=indent
(sklady jsou definovány podle
úrovně odsazení textu, vhodné pro programovací jazyky) a :set foldmethod=syntax
(sklady se definují podle
syntaktických kategorií textu, které na to ale musí být připraveny).
Nejsilnější variantou automatické definice skladů je :set foldmethod=expr
, kdy jsou sklady definovány
obecnými výrazy :set foldexpr=výraz
.
Jejich problematika však přesahuje záběr tohoto textu. Dobrým začátkem pro
jejich studium je :help fold-expr
.
© 2016 Pavel Satrapa