☰ menu
Pavel Satrapa

Editace textu

Nejdůležitější editační operaci – vkládání nového textu – již znáte z předchozí stránky. Stačí přejít do vkládacího režimu a psát a psát a psát. Pokud uděláte chybu, lze ji obvyklým způsobem umazat klávesou Backspace a nahradit správným textem. Takto však Backspace funguje jen do té doby, než opustíte vkládací režim. Pak je třeba sáhnout k jiným prostředkům.

Mazání

S výjimkou výše zmíněných elementárních oprav se mazání odehrává v normálním režimu. Základní operaci – smazání znaku pod kurzorem – obstará klávesa x. Samozřejmě jí lze předsadit číslo, takže 20x zlikviduje 20 znaků, počínaje tím pod kurzorem.

Druhou obvyklou operací je smazání řádku. Na ten již budete potřebovat klávesy dvě, a sice dd. Řádek, na němž se momentálně nachází kurzor, bude zlikvidován.

Kopírování

Veškeré likvidační operace mají jednu zajímavou vlastnost: vymazaný text se automaticky ukládá do registru, z nějž jej následně můžete vložit na jiné místo. O vložení se postará klávesa p (vkládá za aktuální pozici) nebo P (před aktuální pozici).

Chování vkládaného materiálu se liší podle jeho charakteru. Pokud se jedná o pouhou část řádku, bude vložen do aktuálního řádku za nebo před kurzor. Jestliže však text v registru obsahuje alespoň jeden celý řádek, bude vložen za/před aktuální řádek.

Příklad:

Hezkým příkladem činnosti mazacích a vkládacích mechanismů je změna pořadí dvou po sobě jdoucích znaků. Obstará ji klávesová kombinace xp, sledujte její chování:

Vyjdeme ze slova

pohoda
  ^

Stisknutím x bude z textu odstraněn znak pod kurzorem (písmeno „h“) a zbytek řádku se posune doleva. Smazaný znak se automaticky uloží do registru. Aktuální stav tedy vypadá takto:

pooda
  ^

Stisknutím klávesy p vložíte obsah registru za aktuální pozici. Jelikož v registru je jediný znak („h“), bude vložen do řádku za kurzor a vznikne:

poohda
   ^

Příklad:

Druhý příklad zaměřím na likvidaci řádků. Řekněme, že máme text

raz
dva
tři
čtyři

Kurzor je na druhém řádku (odpovídající znak je vyznačen tučně a podtržen). Použijete-li příkaz 2dd, odstraníte druhý a třetí řádek:

raz
čtyři

Chcete-li se vrátit k původnímu stavu, stačí stisknout P. Jelikož registr obsahuje více než řádek, bude jeho obsah vložen jako samostatné řádky před řádek s kurzorem. Vznikne tedy opět původní text

raz
dva
tři
čtyři

Pokud chcete řádek (nebo jejich skupinu) přesunout do registru, ale ponechat v textu, použijte yy. Tento příkaz uloží do registru aktuální řádek. Chcete-li tedy zdvojit aktuální řádek, použijte yyp.

Každé uložení do registru samozřejmě znamená, že jeho stávající obsah bude zlikvidován. Z tohoto důvodu je podstatný rozdíl, zda při mazání pěti znaků pětkrát stisknete klávesu x nebo použijete 5x. V prvním případě se provede pět samostatných příkazů mazání. Každý z nich vloží do registru právě likvidovaný znak a zruší jeho předchozí obsah. Po provedení posledního tudíž v registru bude jediný (poslední vymazaný) znak. Naproti tomu 5x vymaže naráz všech pět znaků a do registru uloží celou pětici.

Odvolávání a vracení

Dějiny nás učí, že umění v pravou chvíli odvolat bývá rozhodující mezi bytím a nebytím. Proto většina moderních editorů dokáže odvolávat poslední provedené změny a (pokud si to uživatel znovu rozmyslí) zase je vracet zpět. V případě vim k odvolání poslední editační operace slouží klávesa u (jakožto „undo“). Můžete ji používat opakovaně a odvolávat tak další a další akce.

Pokud si později uvědomíte, že některá z editačních operací zase nebyla až tak špatná, můžete ji vrátit pomocí Ctrl-R (redo). Opět je lze používat opakovaně.

Speciální druh odvolání představuje klávesa U. Odvolá všechny změny, provedené na naposledy změněném řádku.

Editační lahůdky

Nastal čas nasadit sprint a zmizet milovníkům přesýpacích hodin za obzorem. Pro tuto část jsem si nechal několik specialit, které práci s vim velmi významně zrychlují.

První chuťovkou je prostá tečka. Příkaz . zopakuje vaši poslední editační operaci. To znamená poslední vložení, smazání či změnu textu. Pohyby nejsou považovány za editační operace.

Příklad:

Strohý popis činnosti tečky nezní nijak bombasticky. Je třeba si však uvědomit, že editační operace může být dosti inteligentní, místy až rafinovaná. Například budu mít seznam pěti jmen

Eleonora Líbezná
Otýlie Kyselá
Mojmír Slizký
Jiří Milý
Leonid Vasiljevič Brown

který chci zařadit na WWW stránku. Chci z něj strukturálně udělat seznam, což znamená, že každé jméno má být obaleno prvkem <li>. Přesunu kurzor na první řádek a použiji příkaz I<li>[Esc]. Tím jsem na jeho začátek vložil <li>. Nyní stačí jen střídavě mačkat kurzor dolů a . a přidávat <li> na začátky dalších a dalších řádků. Obdobně mohu příkazem A</li>[Esc] přidat na konec řádku ukončovací značku a pomocí tečky ji pak snadno zopakovat na každém řádku.

Nejkouzelnější možností však je kombinace editačního příkazu s libovolným pohybem. Pokud před pohybem stisknete kouzelnou klávesu, bude se editační operace týkat textu od aktuální polohy kurzoru až po cílovou pozici, na niž se dostane provedením dotyčného pohybu. Základními kouzelnými klávesami jsou

d vymazání (delete), likvidovaný text se uloží do registru
y kopírování do registru (yank)
c změna (nahrazení novým obsahem, change)

Takže například změnu slova zařídíte tak, že najedete kurzorem na jeho začátek a použijete příkaz cw. Likvidaci odstavce (od aktuální pozice do konce) obstará d}. Mým často používaným příkazem je změna lokátoru v odkazu ve zdrojovém textu WWW stránky. Přesunu kurzor za zahajující uvozovky a pak nasadím ct", čímž požaduji změnu textu až po následující uvozovky. Kromě pohybů lze používat i logické objekty, ale ty si nechám až na později.

Samozřejmě je k dispozici též opakování. Nezáleží při něm na tom, zda použijete 2dw nebo d2w. V obou případech budou vymazána dvě slova a uložena do vyrovnávací paměti. Skutečnost, že zmiňované vylomeniny lze navíc snadno opakovat pomocí tečky, představuje zcela novou úroveň rozkoše při používání vim.

Kromě základních tří modifikátorů d, y a c je k dispozici ještě řada dalších. K používání některých z nich budete potřebovat pokročilejší znalosti. Zde se omezím na pouhý výčet.

g~ zamění malá/velká písmena v textu
gu převede text na malá písmena
gU převede text na velká písmena
! zpracuje text externím programem
= zpracuje text externím formátovačem; jeho jméno lze nastavit pomocí :set equalprg; není-li nastaveno, uspořádá se jako zdrojový text v C
gq přeformátuje text podle platných okrajů
> posune text doprava
< posune text doleva