vim na ex
Editor vi, předek vim, vznikl jako druhá tvář editoru ex. Jednalo se o jeden program, který měl dvě jména a jim příslušející dva druhy chování. Spustil-li se jako vi, pracoval v celoobrazovkovém režimu. Pokud jste jej zavolali pod jménem ex, pracoval jako editor řádkový.
I v současném vim zůstala zachována možnost používat příkazy původního ex. Budou vám pravděpodobně připadat zvláštní, protože řádkové editory již ukončily svou pouť počítačovým světem a tento pojem dnes málokomu něco říká. Jednalo se o interaktivní editory, v nichž jste se ale nepohybovali přímo v textu. Místo toho jste editační operace řídili z jakéhosi ovládacího panelu. Zadávali jste přitom příkazy typu „přesuň se na řádek 10“, „smaž 3 řádky“, „nahraď na aktuálním řádku slovo Ivánek slovem Ivan“, „zobraz 5 řádků“ a podobně.
Do kategorie ex-příkazů patří různé nastavování parametrů, definice
maker, práce se soubory a podobně. Jistě si vzpomínáte, že jejich zadávání
aktivujete z normálního režimu dvojtečkou a ukončujete buď klávesou [Enter]
nebo [Esc]
(pokud se
rozhodnete akci odvolat).
Editační příkazy ex
Malou skupinu ex-příkazů tvoří též příkazy editační. Z nich je
masivně používán jediný: příkaz s
(substitute),
sloužící pro vyhledávání a nahrazování řetězců. V této kapitole budu používat
jiný – příkaz d
(delete), který likviduje
řádky. Je totiž mnohem jednodušší.
Editační ex-příkazy mají jednotný tvar:
<řádky><příkaz><parametry>
Řádky stanoví, kterých řádků textu se bude týkat. Následuje určení příkazu, jenž má být proveden. Ten může ke své činnosti vyžadovat či se nechá ovlivnit jistými parametry. V této kapitole se budu podrobněji věnovat pouze definici řádků.
Specifikace řádků
V nejjednodušším případě může zcela chybět. Pak se příkaz týká pouze aktuálního
řádku. Zadáním :d[Enter]
tedy smažete řádek, na němž
se právě nachází kurzor.
Druhou jednoduchou možností je zadat pořadové číslo daného řádku. Například
o odstranění devatenáctého řádku se postará :19d
(abych zkrátil příkazy, budu s dovolením vynechávat závěrečnou klávesu [Enter]
). Speciální „číslo“ představuje znak
$
, který označuje poslední řádek textu. Druhou
specialitou je tečka (.
), která ztělesňuje aktuální
řádek.
Jak zjišťovat čísla řádků? Pokud nepracujete z pomalého terminálu, nejlepší je
nechat si trvale zobrazovat pozici kurzoru pomocí :set ruler
. V pravé části posledního řádku obrazovky
se objeví dvojice čísel, z nichž první je číslo řádku, na němž se právě nachází
kurzor. Pokud toto zobrazování z nějakého důvodu nechcete zapnout, používejte
ke zjišťování čísel Ctrl-g
.
Poměrně často potřebujete provést příkaz pro určitou skupinu řádků. V
takovém případě je zadejte prostřednictvím intervalu, jehož dolní a horní mez
oddělte navzájem čárkou. Takže ke smazání pátého až osmého řádku poslouží :5,8d
. Můžete samozřejmě využít i speciální
„čísla“, takže vymazání textu od aktuálního řádku až do konce
souboru zajistí :.,$d
. Všimněte si, že mezi
jednotlivými znaky se nedělají mezery.
V řadě případů (zejména při hledání a nahrazování) chcete příkaz provést pro
celý soubor. Pak sáhněte po speciálním znaku %
, který
na místě definice řádků slouží jako zkratka za 1,$
.
Příkaz tudíž zasáhne celý text.
Nejlahůdkovější konstrukcí je zadat číslo řádku prostřednictvím vyhledávání.
Místo prostého čísla můžete totiž uvést /řetězec/
a příkaz se bude týkat nejbližšího
následujícího řádku, obsahujícího uvedený řetězec. Obdobně ?řetězec?
vyhledává směrem k začátku souboru.
Chcete-li tedy smazat nejbližší následující komentář v jazyce C, použijte
:/\/*/,/*\//d
.
Všimněte si, že lomítko zde má funkci speciálního znaku (ukončuje hledaný
výraz). Pokud se má vyskytnout uvnitř hledaného textu, je třeba před ním uvést
zpětné lomítko, aby se tento speciální význam potlačil. Proto se začátek
komentáře /*
zapisuje ve tvaru \/*
a konec
analogicky.
A na závěr něco pro líné. Nejpohodlnějším (a často i nejrychlejším) způsobem k
zadávání rozmezí řádků, jichž se má příkaz dotknout, je
vizuální režim. Prostě si vyberte dotyčný text a
stiskněte :
. Ve spodním řádku se objeví rozsah
řádků '<'>
, což znamená „od prvního do
posledního vybraného řádku“.
© 2016 Pavel Satrapa