☰ menu
Pavel Satrapa

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“.