Textový editor vi
                               -----------------

      Textový editor vi  je následovníkem řádkově orientovaných editorů ed
      a ex   a zdědil po  nich  jejich příkazy, ke   kterým přidal možnost
      pohybu  po textu zobrazeném  na  celé  obrazovce. Textový editor  vi
      spustíme příkazem vi [soubor], kde   soubor je soubor, který  chceme
      editovat.  Editor si vytvoří  pracovní   kopii  a obsah  souboru  se
      zobrazí na obrazovce. V  tom   okamžiku se nacházíte  v   příkazovém
      režimu. V tomto   režimu můžete zadávat  násleující  příkazy (uvádím
      pouze ty nejdůležitější).

      Nejdříve trochu mimo pořadí uvedu, jak program vi ukončit:

          : x Enter   -- uloží změny a ukončí
          : q Enter   -- ukončí bez ukládání (pouze nejsou-li změny)
          : q ! Enter -- ukončí a zruší všechny změny

      Tak,  doufám,  že  jste pochopili,   proč   jsem začal příkazem  pro
      ukončení a  teď konečně důležité   příkazy  (pozn: | mezi  klávesami
      značí alternativní možnosti vyvlání):

      Přechody do vkládacího režimu:
          i   -- začne vkládat na pozici kurzoru.
          A   -- začne vkládat na konci řádku.
          o   -- vloží řádek pod kurzor.
          O   -- vloží řádek nad kurzor.
          R   -- začne nahrazovat na pozici kurzoru.

      Pohyb v textu:

          C-f | PgDn       -- o obrazovu dolu
          C-b | PgUp       -- o obrazovku nahoru
          C-d              -- půl obrazovky dolu
          C-u              -- půl obrazovky nahoru
          + | Enter        -- na první nemez. znak následujícího řádku
          -                -- ma první nemez. znak předcházejícího rádku
          j | Down         -- na následující řádek (stajný sloupec)
          k | Up           -- na předcházející řádek (stejný sloupec)
          0 | Home         -- na začátek řádku
          ^                -- na první nemezerový znak
           | End          -- na konec řádku
          h | Left | Bsp   -- o znak doleva
          l | Right | Spc  -- o znak doprava
      (existuje ještě spousta dalších, ale ty  si už najděte sami (třeba v
      helpu   -- příkaz  : h   Enter  (nemusí  fungovat,  ale v  rozumných
      instalacích je)). Poznamenejme, že  stisk C-h je ekvivalentní stisku
      Bsp, což je užitečné na mizerných terminálech.

      Vyhledávání:
          / regexp   -- vyhledává následující výskyt regexp
          ? regexp   -- vyhledává předcházející výskyt regexp

      Mazání, náhrady a kopírování:
          d mv    -- smaže znaky od aktuální pozice kurzoru do pozice po
                     provedení příkazu posuvu mv (smazaný text se
                     zkopíruje do paměti)
          c mv    -- nahrazuje znaky od ..., tedy smaže je (nebo označí) a
                     přejde do režimu vkládání
          y mv    -- zkopíruje znaky od ... do paměti
          p       -- zkopíruje znaky z paměti za kurzor
          P       -- zkopíruje znaky z paměti před kurzor
          " x ... -- použití prefixu " nějaképísmeno pro předchozí případy
                     (kromě c) způsobí, že se bude pracovat s pojmenovaným
                     bufferem tonějaképísmeno, což znamená, že můžete mít
                     v paměti najednou uloženo až 27 řetězců

      A ještě tři důležité příkazy:
          u   -- obnov stav před poslední změnou
          U   -- obnov aktuální řádek
          .   -- naprosto ďábelský příkaz opakuj poslední změnu

      Ve vkládacím  režimu  se znaky  vkládají na místo  kurzoru. Je  tedy
      celkem pochopitelné, že znaky jako h j k  l nemohou posouvat kurzor.
      To je  ve vkládacím režimu možné  pouze kurzorovými klávesami (které
      nemusí vždy fungovat -- např v xtermu nefunguje Home a End). Jinak k
      němu  asi není  co říct. K  čemu je  ale  rozhodně co  říct je režim
      příkazů exu. Když napíšete :, můžete na spodní řádce zadávat i velmi
      komplikované příkazy. Každý takovýto příkaz má následující tvar:

          [adresa] příkaz [argumenty]

      Takže  popořádku.  Adresu řádku tvoří  jedno   číslo řádku, nebo dvě
      čísla řádků  oddělených  čárkou, které představují   interval řádků.
      Číslem řádku se zde rozumí buď jeho číslo (decimálně), . za aktuální
      řádek,   za poslední žádek nebo /regex/,  což je každý řádek, který
      vyhovuje regex (najde se na něm). Existují další vymoženosti, ale ty
      jsou daleko nad rámec tohoto úvodu (stejně je děsně dlouhej).

      Jména  příkazů  jsou pak  následující  (jedná se  jako vždy  pouze o
      výběr).  K   syntaxi následujících  řádků  poznamenejme,  že symboly
      [1adr] a   [2adr] před příkazy značí,  že  příkaz lze provádět  na 1
      řádek,  resp.   interval   řádků (může   před    ním být   příslušná
      adresa). Chybí li adresa, provádí se příkaz na aktuálním řádku.

          [2adr]s/regex/subst/flag
                  Tento  příkaz  nahradí  výskyty  regex  řetězcem  subst.
                  V řetězci subst se mohou   vyskytovat sekvence \1 \2 ...
                  které se nahradí  řetězci, které  odpovídaly 1., 2.  ...
                  části regulárního  výrazu uzavřené v závorkách. Příznaky
                  flag mohou být následující:
                      g      - nahraď všechny výskyty na řádce
                      w file - řádky,  na kterých  se provedla  náhrada se
                               zapíší do souboru file
                      n      - náhradí se právě n-tý výskyt na každé řádce
                      p      - řádky, na kterých se provedla náhrada se
                               vypíší (má význam pouze pro ed, ex a sed)
                  Tento   příkaz   je  bezkonkurenčně   nejpoužívanější  a
                  vzhledem  k  možnostem  regulárních  výrazů     naprosto
                  ďábelský.

          [2adr]p
                  Tento příkaz opíše řádky na výstup. Má smysl pro sed.

          [2adr]l
                  Tento   příkaz  opíše  řádky  na  výstup  pomocí  escape
                  sekvencí.

          [1adr]r file
                  Tento  příkaz  načte  obsah  souboru file a vloží jej za
                  řádek v adrese. Číslo řádku může  být  i 0  (před  první
                  řádek)

          [2addr]!příkaz
                  Tato předpona příkazu  způsobí, že příkaz se  provede na
                  všechny řádky, kromě uvedeného intervalu.

      Co   se  týče  dalších  příkazů  vás   odkážu na příslušné manuálové
      stránky. Pro editory ed  a sed se  totiž dokonce dají psát skripty a
      tak zde existují i řídící příkazy a různé další blázniviny.


            výheň