Základy ovládání editoru vi

Pokud se dostanete do tohoto editoru omylem, můžete ho ukončit následující posloupností znaků (neuloží se změny): <Esc>:q!

Editor vi se spustí příkazem:

vi soubor

Editor má 3 režimy - režim řádkový, režim povelový (zobrazování) a režim vkládání. Po spuštění editoru je obvykle nastaven zobrazovací režim (v případě nastavení neznamého typu terminálu v environment proměnné TERM lze pracovat pouze v řádkovém režimu).

Povelový režim umožňuje provádět následující základní editační operace: pohyb po souboru, výmaz znaků (textu), práce s odkládací oblastí (varianta bloků). Pro uložení souboru a ukončení editoru se musí přejít do příkazového režimu. Režim vkládání, jak název napovídá, slouží pro vkládání nových znaků do souboru.

Povelový režim editoru vi

V povelovém režimu se k zobrazování textu používá celá obrazovka.

Základní příkazy pro pohyb po textu:

šipka_nahoru     O řádku nahoru, též k.
šipka_dolů       O řádku dolů, též j.
šipka_vpravo     O znak doprava, též l.
šipka_vlevo      O znak doleva, též h.
$                Na konec řádku, též <END>.
0                Na začátek řádku.
w                Na začátek následujícího slova.
b                Na začátek předchozího slova.
G                Na konec souboru.
1G               Na 1. řádek souboru.
^F               O stránku dolů - ke konci souboru, též <PgDn>.
^B               O stránku nahoru - k začátku souboru, též <PgUp>.
^D               O půl stránky dolů - ke konci souboru.
^U               O půl stránku nahoru - k začátku souboru.
/řetězec         Vyhledání řetězce znaků směrem ke konci souboru
                 (po stisknutí klávesy / se zadává řetězec na dolním řádku).
                 Pokud se řetězec do konce souboru nenajde, hledá se od
                 začátku souboru (cyklické vyhledávání).
?řetězec         Vyhledání řetězce znaků směrem k začátku souboru, jinak
                 stejně jako /řetězec.

Základní příkazy pro výmaz a opravu existujícího textu:

x             Maže znak na pozici kursoru.
dd            Výmaz aktuální řádky.
dpohyb        Maže text od aktuální pozice po pozici, kam směřuje pohyb.
    Příklady:
        d$        výmaz od aktuální pozice do konce řádku,
        dG        výmaz od aktuální pozice do konce souboru,
        d/text    výmaz od aktuální pozice po první výskyt řetězce text,
rx            Přepsání znaku na pozici kurzoru znakem x.
J             Připojení následujícího řádku na konec aktuálního řádku
              (tj. vymazaní znaku konce řádky).

Práce s odkládací oblastí:

yy          Uložení aktuálního řádku do odkládací oblasti.
ypohyb      Uložení textu do odkládací oblasti od aktuální pozice po
            pozici, kam směřuje pohyb. Příklad:
            y$      uložení textu od aktuální pozice do konce řádku,
p           Vložení textu z odkládací oblasti za pozici kurzoru.
P           Vložení textu z odkládací oblasti před pozici kurzoru.

Režim vkládání editoru vi

Do režimu vkládání/přepisování se editor přepne jedním z následujících příkazů v povelovém režimu:
a        Vkládání za pozici kurzoru.
A        Vkládání na konec řádku.
i        Vkládání na pozici kurzoru.
I        Vkládání na začátek řádky.
R        Režim přepisování znaků.

Ve vkládacím režimu mají pouze dvě klávesy speciální význam (<Esc> a <BackSpace>) - vše ostatní se vkládá do souboru. <Esc> ukončuje vstupní režim - editor přechází zpět do editovacího režimu. <BackSpace> po jednom maže vložené znaky.

V režimu vkládání nelze používat šipky!!!


Řádkový režim editoru vi, editory ex a ed

V řádkovém režimu lze používat příkazy editoru ex. Jeden příkaz řádkového režimu můžeme zadat po znaku : - editor zobrazí na dolní řádce dvojtečku a lze zadat příkaz. Trvale lze přejít do příkazového režimu pomocí povelu Q. Zpět do obrazovkového režimu lze přejít příkazem visual.

V editorech ed a ex lze u většiny příkazů určit rozsah aktivity příkazu, a to buďto označením jednoho řádku nebo dvojicí řádků. Pro označní řádků lze použít:
.         Současný řádek.
$         Poslední řádek textu v editované oblasti.
n         Číslo desítkové soustavy označuje pořadí řádku editované oblasti.
.+n       Relativní odkaz na řádek vzdálený n řádků kupředu.
.-n       Odkaz na řádek vzdálený n řádků zpět.
/řetězec  První řádek od aktuálního směrem ke konci editované oblasti
              obsahující řetězec (řádek odpovídající zadanému regulárnímu
              výrazu).
Ve dvojici jsou adresy odděleny znakem ,. Např.
      1,$     adresuje celou oblast editace.
      .,+3    adresuje oblast od aktuálního řádku do řádku o 3 dále včetně,

Nejčastěji používané příkazy řádkového režimu editoru vi:

[rozsah] w [soubor]
      Zápis editovaného textu do souboru. Pokud se jméno souboru neuvede,
      přepíše se soubor, který byl otevřen. Variantou w! lze textem
      přepsat soubor, ke kterému má uživatel pouze přístup na čtení. Příkaz
      wq je totéž jako w a pak q. Pokud není uveden rozsah,
      zapisuje se text z celé editovací oblasti.

q     Ukončení práce editoru. Pokud změny nejsou uloženy, nelze
      takto ukončit.

q!    Ukončení editoru bez uložení změny.

r soubor
      Načtení textu ze souboru do oblasti editace za aktuální řádek.

[rozsah] s/regulární_výraz/text/[volby]
      Výměna textu danného regulárním výrazem za text. Jako volbu lze zadat
      g, který rozšiřuje platnost výměny na všechny výskyty
      regulárního výrazu na řádce. Při použití volby c bude editor
      požadovat před každou výměnou potvrzení. Pokud není uveden rozsah, týká
      se výměna pouze aktuálního řádku. Příklad:
  1,$ s/novak/Novak/gc
       V celém souboru se místo řetězce novak zapíše řetězec Novak. Před
           každou výměnnou se editor zeptá, zda ji má opravdu provést.

[rozsah] p 
      Výpis řádku (řádků dle zadaného rozsahu) na obrazovce.

a    Vkládání textu za aktuální řádek. Následující text zapisovaný
      na terminál je vložen do oblasti editace až po řádek, který
      obsahuje pouze v prvním sloupci znak .

i    Vkládání textu před aktuální řádek.

[rozsah]d
            Zrušení aktuálního řádku (řádků dle zadaného rozsahu).

[rozsah] g/regulární_výraz/příkazy
      Na řádcích, které odpovídají regulárnímu výrazu se provedou zadané
      příkazy. Příklad:
  1,$ g/^#/d
       v celém souboru se zruší řádky, které začínají znakem #.

© R. Kunstová, L. Pavlíček - Vysoká škola ekonomická v Praze, KIT