vi je obrazovkový textový editor. Tento počítačový program napsal Bill Joy v roce 1976 pro unixový operační systém BSD.

Takto vypadá program vi

Název programu vi se vyslovuje jako „ví-aj“ a označuje nejkratší možnou zkratku příkazu visual v textovém editoru ex. Tento příkaz přepíná řádkový mód editoru do celoobrazovkového módu.

vi přiřazuje klávesám nebo kombinacím kláves různé významy, podle toho, v jakém módu editor zrovna pracuje. V módu vkládání je text vložen do dokumentu. Po stisku klávesy Escape přejde editor do příkazového módu, ve kterém některá písmena ovládají pohyb kurzoru nebo editační funkce. Například: j posouvá kurzor o jednu řádku dolů, k jednu řádku nahoru, x vymaže znak na pozici kurzoru a i znamená návrat do módu vkládání (insert mode). Znaky kláves stisknutých v příkazovém módu se nevkládají do souboru, ale interpretují se jako příkazy. Tento princip činí začátečníkům značné potíže. Pro zkušené uživatele naopak tento princip dovoluje velmi efektivní ovládání programu bez nutnosti používat myš nebo komplikované kombinace kláves.

V příkazovém módu lze provádět celou řadu editovacích operací stiskem základních kláves bez toho, aby uživatel musel tisknout klávesy <Alt>, <Ctrl> nebo jiné speciální klávesy. Komplikovanější editovací operace jsou tvořeny posloupností jednodušších příkazů (např. dw vymaže jedno slovo, c2fa změní text od pozice kurzoru až do místa, na kterém je druhé „a“). Pro zkušené uživatele to znamená výrazné zrychlení práce. Není potřeba vůbec sundávat ruku z klávesnice.

První verze vi neměly vůbec žádnou indikaci aktuálního módu. Jedinou možností bylo stisknout klávesu Escape a přejít do příkazového módu. Pokud už program v příkazovém módu byl, ozvalo se pípnutí. Současné verze vi již aktuální mód označují. Grafické implementace vi (např. gvim) plně podporují práci s myší a přístup k menu.

Editor vi se stal standardem UNIXových editorů. V každé instalaci UNIXu obvykle je k dispozici editor vi, jeho klon nebo nástupce Vim. Editor vi je i dnes používán celou řadou uživatelů operačních systému UNIX. Díky náročnosti se vi naučit je vi „přátelský“ software. Své přátele si pečlivě vybírá na rozdíl od promiskuitního software, který si zadá s každým. Těm, kdo se vi(m) naučí, slouží pak věrně desítky let.

Ovládání

editovat

Módy činnosti editoru vi

editovat

Příkazový mód

editovat

V tomto módu se nachází program vi po spuštění. Znaky nejsou vkládány do textu, ale jsou interpretovány jako příkazy

  • Escape - pípnutím potvrdí nastavení příkazového módu, ze všech ostatních módů přepíná do příkazového módu

Rozšiřitelný příkazový mód

editovat

Tento mód slouží k zadávání složitějších příkazů (např. změny řetězců v souboru)

  • : - přechod do rozšířeného příkazového módu. Za znak : se píše text příkazu
  • Enter - provedení příkazu a návrat do příkazového módu
  • Q - trvalý přechod do rozšířeného příkazového módu (někdy se také označuje jako ex mód)
  • vi - návrat do příkazového módu

Vkládací mód

editovat

Vkládací mód umožňuje vkládání textu

  • a, c, i, o, s, A, C, I, O, R, S - přechod do vkládacího módu
  • Escape - návrat do příkazového módu

Spuštění editoru vi

editovat
příkaz význam
vi abc start editoru a otevření souboru abc na první řádce
vi +101 abc start editoru a otevření souboru abc na 101. řádku
vi + abc start editoru a otevření souboru abc na poslední řádce
vi +/hodnota abc start editoru a otevření souboru abc a skok na řádku, která obsahuje řetězec "hodnota"

Ukončení editoru vi

editovat
příkaz význam
:q ukončení programu bez uložení změn do souboru
:q! ukončení programu bez uložení změn do souboru (pokud byl obsah souboru změněn)
:x nebo ZZ uložení změn a ukončení programu
:w název2
:q
zápis změn do jiného souboru (s názvem "název2") a ukončení programu
:wq název2 stejný význam jako předchozí řádek
:e! zruší se všechny provedené změny

Pohyb kurzoru na obrazovce

editovat
příkaz význam
h o jeden znak doleva
l o jeden znak doprava
j o jeden řádek dolů
18j o 18 řádků dolů
k o jeden řádek nahoru
příkaz význam
w na začátek následujícího slova
b na začátek předcházejícího slova
W na začátek následujícího slova - oddělovač je pouze mezera, tabelátor nebo nový řádek
B na začátek předcházejícího slova - oddělovač je pouze mezera, tabelátor nebo nový řádek
e na začátek aktuálního slova
E na začátek aktuálního slova - před první mezeru, tabelátor nebo nový řádek
O na začátek řádku - do 1. sloupce
$ na konec řádku - poslední znak na řádce
^ na začátek řádku - první znak na řádce
H na začátek první řádky obrazovky
M na začátek prostřední řádky obrazovky
L na začátek poslední řádky obrazovky

Pohyb kurzoru v souboru

editovat
příkaz význam
Ctrl-f posun o celou obrazovku vpřed
Ctrl-b posun o celou obrazovku vzad
Ctrl-d posun o půl obrazovky vpřed
Ctrl-u posun o půl obrazovky vzad
Ctrl-e posun o jednu řádku vpřed
Ctrl-y posun o jednu řádku vzad
G posun na poslední řádku v souboru
125G posun na 125. řádku v souboru
gg posun na první řádku v souboru (alternativy 1G nebo :1)
zEnter aktuální řádek se nastaví jako první řádek obrazovky
{ na začátek následujícího odstavce odděleného prázdnou řádkou
} na začátek předcházejícího odstavce odděleného prázdnou řádkou

Vkládání a změny textu

editovat
příkaz význam
i následující text bude vložen před pozici kurzoru
a následující text bude vložen za pozici kurzoru
I následující text bude vložen na začátek řádku
A následující text bude vložen na konec řádku
o následující text bude vložen na novou řádku za pozicí za aktuální řádkou
O následující text bude vložen na novou řádku za pozicí před aktuální řádkou
R následující text bude přepisovat starý text od pozice kurzoru
cw následující text bude přepisovat od pozice kurzoru do konce slova označeného znakem $
C následující text bude přepisovat od pozice kurzoru do konce řádky
S následující text bude nahrazovat celou řádku

Dělení a spojování řádků

editovat
příkaz význam
iEnter rozdělí řádku v místě kurzoru
J připojí následující řádku na konec aktuální řádky
7J připojí následujících 6 řádek na konec aktuální řádky (ze 7 řádek udělá jednu)

Mazání textu

editovat
příkaz význam
x smaže jeden znak na pozici kurzoru
X smaže jeden znak před pozici kurzoru
dd smaže aktuální řádek
7dd smaže 7 řádků (aktuální a 6 následujících)
dw smaže vše od pozice kurzoru do konce slova
D smaže vše od pozice kurzoru do konce řádku
df: smaže všechno od pozice kurzoru až do znaku : včetně
. zopakuje naposledy použitý příkaz mazání od nové pozice kurzoru

Změny textu

editovat
příkaz význam
gu(příkaz pohybu kurzoru) převede všechen text v rozsahu příkazu pohybu (třeba w, W, $) na malá písmena
gU(pohyb) totéž na velká písmena
g~(pohyb) zaměnit malá a velká písmena
gq(pohyb) přeformátovat text podle platných okrajů
= přeformátovat programem nastaveným pomocí :set equalprg
! přeformátovat jiným programem

Vyhledávání řetězců

editovat
příkaz význam
/Wikipedie hledá následující výskyt řetězce "Wikipedie"
?Wikipedie hledá předcházející výskyt řetězce "Wikipedie"
n opakuje poslední hledání (next)
N opakuje poslední hledání (next) v opačném směru
/Wikipedie/-7 najde výskyt řetězce "Wikipedie" a pozici kurzoru nastaví o 7 řádek zpět
/wikipedi. najde výskyt řetězce "Wikipedie" i "wikipedia" (. znamená libovolný znak)
/wikiped*a najde výskyt řetězce "wikipedia" i "wikipedista" (* znamená libovolný počet libovolných znaků)

Zaměňování textu

editovat
příkaz význam
s/wikipedia/Wikipedie/ nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - pouze první následující výskyt
s/wikipedia/Wikipedie/g nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty na aktuální řádce
%s/wikipedia/Wikipedie/g nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty v souboru
1,$s/wikipedia/Wikipedie/g nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty v souboru
.,158s/wikipedia/Wikipedie/g nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty od aktuální řádky do řádku číslo 158

Kopírování a přesouvání textu

editovat

Kopírování probíhá přes nepojmenovanou paměť - schránku

příkaz význam
yy nebo Y uloží aktuální řádek do schránky
3yy uloží do schránky 3 řádky, počínaje aktuálním řádkem
y$ uloží do schránky všechno od aktuální pozice kurzoru do konce řádky
yf: uloží do schránky všechno od aktuální pozice kurzoru až do znaku „:“ včetně
p vloží uloženou řádku ze schránky za aktuální řádku
P vloží uložený řádek ze schránky před aktuální řádku, pokud není ve schránce uložený řádek, ale text, bude vložen text před kurzor


Nastavení prostředí

editovat
příkaz význam
:set all výpis všech předvoleb
:set autoident při vkládání nového textu bude každá nová řádka odsazeno vlevo stejně jako předcházející
:set noai vypnutí autoident
:set ignorecase při hledání ingoruje rozdíl mezi velkým a malým písmenem
:set noi vypnutí ignorecase
:set list zobrazí tabelátory jako ^l a konce řádku jako $
:set nolist vypnutí list
:set number před řádky se vypíšou jejich pořadová čísla
:set nonu vypnutí number
... seznam parametrů není kompetní

Každý uživatel si může trvale nakonfigurovat editor vi podle vlastních potřeb. Buď pomocí konfiguračního souboru .exrc v domovském adresáři, nebo pomocí proměnné EXINIT. (pro ViM se používá i .vimrc)

Příklad:

.exrc
" libovolný komentář
set ignorecase number
abbrev retrun return
abbrev exit exit(0);
EXINIT
export EXINIT="set ic nu | abbrev retrun return"

Odsazování a zalamování textu

editovat
příkaz význam
:set tabstop velikost tabu, zkratka :set ts
:set wrap zalamování řádků
:set linebreak zalamování podle mezer - vhodnější pro texty (zkratka lbr)
:set textwidth šířka textu - automaticky tvoří nové řádky tak, aby tato šířka nebyla překročena. Pokud je nastavená na nulu, je vypnutá. (zkratka tw)
:set list zobrazení netisknutelných znaků
:set nooption příslušnou volbu vypíná
... dále viz také příkaz :help wrap apod.

vi v rámci more a man

editovat

Vi lze použít jako unixový pager, stejně jako more nebo less, např. oblíbená je možnost zobrazit výstup z terminálu v novém okně gvimu - ps ax |gvim - (pozor na pomlčku). Editací nastavení programu man lze dosáhnout stejného výsledku i pro unixové manuálové stránky.

Externí odkazy

editovat