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řiKurzor 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řiChcete-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í textraz 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č Brownkterý 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říkazI<li>[Esc]
. Tím jsem na jeho začátek vložil<li>
. Nyní stačí jen střídavě mačkatkurzor dolů
a.
a přidávat<li>
na začátky dalších a dalších řádků. Obdobně mohu příkazemA</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 |
© 2016 Pavel Satrapa