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ň