vi
je standardním Unixovým programem pro editaci textů. Jeho zvládnutí je pro systémové administrátory nezbytné. Existuje několik klonů či verzí programu vi: vi samotný, dále elvis
, vile
, a vim
. Aspoň jeden z nich se vyskytuje snad v každé verzi Unixu, a tedy i Linuxu. Všechny jeho verze obsahují stejné základní vlastnosti a sadu příkazů, takže zvládnutí jedné verze by mělo usnadnit zvládnutí ostatních.
vi
nabízí množství užitečných pomůcek jako je zvýrazňování syntaxe, formátování kódu, výkonné mechanismy pro vyhledávání a nahrazování, makra a další. Tyto vlastnosti jej činí obzvláště atraktivním pro programátory, webové vývojáře a podobně. Systémoví administrátoři ocení automatizaci a integraci s jakýmkoli disponibilním shellem.
vi
může být spouštěn z příkazové řádky několika způsoby. Tím nejjednodušším je:
$ vi
vi
nastartuje s prázdným bufferem. V tomto momentě uvidíte nejspíše prázdnou obrazovku. Je to příkazový mód a čeká se na vás, že řeknete, co se má dělat. Abyste vi ukončili, napište:
:q
Pokud nebyly provedeny žádné změny v editovaném souboru, vi
se bezprostředně ukončí. Pokud změny učiněny byly, bude vás vi
varovat a současně vás poučí, jak toto varování přebít a problém ignorovat (napište :q!
)
Také můžete spouště vi s nějakým už existujícím souborem. Například soubor /etc/resolv.conf
můžete otevřít takto:
$ vi /etc/resolv.conf
Dokonce můžete vi spustit tak, aby se zadaný soubor otevřel na nějakém konkrétním řádku. Například můžete spustit vi na 47. řádku souboru /usr/src/linux/init/main.c
. Uděláte to takto:
vi +47 /usr/src/linux/init/main.c
vi
zobrazí zadaný soubor a umístí kurzor na příslušný řádek. Pokud by číslo řádku bylo vyšší, než jejich počet v souboru, umístí se kurzor na poslední řádek. Tato volba je obzvláště užitečná pro programátory, neboť jim umožňuje skočit rovnou na řádek, kde se objevila chyba.
Editor vi
pracuje v různých módech, které se používají k provádění různých úkolů. Když nastartujete vi
, dostanete se do příkazového módu (command mode). V tomto režimu můžete zadávat různé příkazy pro manipulaci s textem, pohybovat se v textu, ukládat, ukončovat a měnit módy (and mode). Editování textu se provádí v módu vkládání (insert mode). Mezi jednotlivými módy se můžete přepínat snadno pomocí různých kláves, které popíšeme dále.
Na počátku se nacházíte v příkazovém módu. V tomto módu nemůžete přímo vkládat ani upravovat text. Nicméně můžete s textem různě manipulovat, vyhledávat, ukončovat, ukládat, načítat nové soubory atd. To co jsme si teď řekli berte jen jako přičichnutí k příkazovému módu.
Asi nejpoužívanějším příkazem v příkazovém módu je přepnutí do módu vkládání. Toho se dosáhne stiskem klávesy i
. Kurzor změní tvar a dole na obrazovce je zobrazen nápis -- INSERT --
(to se nemusí dít v každém klonu editoru vi
). Od této chvíle jsou všechny stisky kláves vkládány do aktuálního bufferu a jsou zobrazovány na obrazovce. K návratu do příkazového módu stiskněte klávesu escape
.
V příkazovém módu se můžete také pohybovat po souboru. Na některých systémech k tomu můžete použít kláves se šipkami. Na jiných asi budete muset používat tradičnější klávesy hjkl
. Zde je jednoduchý seznam těchto kláves a jejich význam:
h |
přesun o jeden znak vlevo |
j |
přesun o jeden znak dolů |
k |
přesun o jeden znak nahoru |
l |
přesun o jeden znak vpravo |
Jednoduše stiskněte některou z těchto kláves. Jak uvidíte později, tyto klávesy je možné kombinovat s čísly a pohyb je pak mnohem rychlejší.
Mnoho příkazů, které používáme v příkazovém módu, začíná dvojtečkou. Například pro ukončení programu vi zadáte příkaz :q
. Dvojtečka indikuje, že se jedná o příkaz, zatímco q
říká editoru, aby se ukončil (quit). Dalšími příkazy jsou (volitelně) číslo následované písmenem. Těmto příkazům dvojtečka nepředchází a jsou obecně používány pro manipulaci s textem.
Například vymazání řádku se provádí stiskem dd
. Tak vymažete řádek, ve kterém je kurzor. Zadáním příkazu 4dd
řeknete editoru, aby smazal čtyři řádky (aktuální a ještě tři pod ním). Obecně tím číslem říkáme, kolikrát se má zadaný příkaz zopakovat.
Čísla můžete kombinovat i s klávesami pro pohyb kurzoru a přesouvat se tak o větší počet pozic najednou. Například 10k
vás přesune o deset řádků výše.
Příkazový mód lze rovněž využít pro vyjímání a vkládání textu a načtení jiných souborů do aktuálního bufferu. Výběr textu pro kopírování provádíme klávesou y
(y=yank). Výběr celé aktuální řádky dosáhnete stiskem yy
, čemuž může předcházet ještě číslo ke zkopírování více řádek najednou. Potom se přesunete do místa, kam se má vybraný text vložit a stisknete p
(p=paste). Text se vloží za aktuální řádek.
A ještě si řekněme něco o vyhledávání. Příkazový mód nabízí jak prosté vyhledání textu, tak velmi složité příkazy pro vyhledávání a nahrazování, využívající skvělých možností regulárních výrazů. Jednoduché hledání vyvoláme stiskem klávesy /
, následované textem, který chceme najít. Editor pak hledá od pozice kurzoru dál směrem ke konci textu a zastaví se v místě, kde hledaný text najde. Přičemž nemusí jít o shodu celých slov, ale jen části. Například vyhledávání slova "lom" najde nejen samostatné slovo "lom", ale i slova "zlom", "plomba", "lomítko", ap. Je to proto, že všecha ta slova v sobě kombinaci písmen "lom" obsahují.
Poté, co vi
nalezl první výskyt hledané fráze, můžete vyvolat další její hledání už pouhým stiskem /
a enteru
. Frázi znovu zapisovat nemusíte. Můžete vyhledávat i opačným směrem. Uděláte to tak, že místo lomítka použijete klávesu ?
. Například, chcete-li, aby se "lom" hledalo směrem k začátku textu, napište ?lom
.
Vkládání a přepisování textu provádníme v módu vkládání. Jak už jsme se zmínili, do módu vkládání se z příkazového módu přepnete stiskem klávesy i
. Potom vše, co mačkáte na klávesnici se vkládá do aktuálního bufferu. Mód vkládádní ukončíte stiskem klávesy Esc
. Tím se vrátít do příkazového módu.
Přepisování textu dosáhnete více způsoby. V příkazovém módu vám stisk klávesy r
umožní nahradit jeden znak, který se nachází pod kurzorem. Pak jen stiskněte nový znak a ten se objeví místo původního a je to. Pak vás to hned přepne zpět do příkazového módu. Stiskem R
se přepnete do přepisovacího módu. Ten vám umožní přepisovat tolik textu, kolik jen chcete. Do příkazového módu se vrátíte jako obvykle stiskem klávesy Escape
.
Některé verze editoru vi vám nabízejí možnost přepínat se mezi módy vkládání a přepisování přímo. Stiskněte klávesu Insert
. To vás přenese do módu vkládání. Jakmile jste v módu vkládání fungují další stisky klávesy Insert
jako přepínač mezi módy vkládání a přepisování.
Soubor můžete otevřít dvěma způsoby. Jednak při spouštění editoru z příkazové řádky můžete zadat i jméno souboru, který pak bude po nastartování otevřen. Nebo, když už máte vi spuštěný, použitím příkazu :e
v příkazovém módu. Například /etc/lilo.conf
otevřete takto:
:e /etc/lilo.conf
Soubor se načte do bufferu a můžete s ním pracovat. Nebyl-li buffer před otevřením souboru prázdný (měli jste tu otevřený jiný soubor), bude stávající soubor v bufferu nahrazen nově otevřeným. Nebyl-li starý soubor před otevíráním nového uložen, bude vi
protestovat a otevření neumožní (poslední provedené úpravy ve stávajícím souboru by se ztratily). Pokud vám to nevadí, řeknete to editoru tak, že pro otevření použijete upravený příkaz :e!
. Obecně vždycky vykřičníkem můžete přebít případné varovné hlášky editoru.
Některé klony editoru vi
(například vim
) umožňují mít otevřeno více bufferů současně. Pak například pro otevření souboru 09-vi.sgml
v novém bufferu použijete příkaz:
:split 09-vi.sgml
Obrazovka se pak vodorovně rozpůlí a nový soubor bude zobrazen v její horní polovině, zatímco ten stávající bude v dolní polovině. Různými příkazy pak můžete toto rozdělení obrazovky měnit. Znalcům editoru Emacs ty příkazy budou povědomé. Nejlepší způsob jak se o těchto příkazech něco dovědět je prostudovat manuálovou stránku vašeho vi klonu. Poznamenejme, že mnoho klonů myšlenku rozdělené obrazovky nepodporují, takže jí nebudete moci využít.
vi
nabízí několik způsobů, jak uložit soubor. Chcete-li uložit obsah aktuálního bufferu do souboru randomness
, napište:
:w randomness
Jakmile máte soubor jednou uložený, jeho opětovné uložení provedete už pouhým zapsáním :w
. Tím uložíte veškeré provedené změny. Po uložení souboru se vi vrátí do příkazového módu. Chcete-li nejen uložit soubor, ale rovněž ukončit práci s editorem (což je dost častá kombinace), můžete zapsat :wq
. To říká editoru vi, aby uložil soubor a ukončil svou činnost.
Někdy možná budete potřebovat uložit soubor, který je označen jako "read-only" (jen pro čtení). Dosáhnete toho přidáním vykřičníku za příkaz k uložení:
:w!
:wq!
Jeden ze způsobů jak ukončit vi je příkaz :wq
, který uloží aktuální buffer a skončí. Nebo můžete ukončit editor bez ukládání pomocí :q
či :q!
.
Tato část je stručnou referenční příručkou nejpoužívanějších příkazů vi. O některých z nich jsme psali už dříve v této kapitole, zatímco jiné budou nové.
Přesouvání
Operace | Klávesa |
---|---|
vlevo, dolů, nahoru, doprava | h, j, k, l |
na konec řádku | $ |
na začátek řádku | ^ |
Na konec souboru | G |
Na začátek souboru | :1 |
Na řádek 47 | :47 |
Editování
Operace | Klávesa |
---|---|
Vyjmutí řádku | dd |
Vyjmutí pěti řádků | 5dd |
Přepsání znaku | r |
Vyjmutí znaku | x |
Vyjmutí deseti znaků | 10x |
Odvolání poslední akce (undo) | u |
Spojení aktuálního a následujících řádků | J |
Vyhledávání
Operace | Klávesy |
---|---|
Vyhledání asdf | /asdf |
Zpětné hledání asdf | ?asdf |
Opakování posledního hledání vpřed | / |
Opakování posledního hledání dozadu | ? |
Ukládání a ukončování
Operace | Klávesa |
---|---|
Ukončení -Quit | :q |
Ukončení bez ukládání | :q! |
Ulozit a ukončit | :wq |
Ulozit, ale nekončit | :w |
Znovunačíst otevřený soubor | :e! |
Zapsat buffer do souboru |
:w asdf |
Otevřít soubor hejaz | :e hejaz |
Načtení souboru asdf do bufferu | :r asdf |
Načtení příkazu ls do bufferu | :r !ls |