- ~
- změní malé písmeno na velké a naopak
- [n]Ctext
- přepíše řádek od kurzoru do konce
- [n]C$text
- přepíše řádek od kurzoru do konce, jako
[n]Ctext
- [n]Rtext
- nahradí znaky textu znaky z klávesnice
- [n]rznak
- nahradí znak znakem z klávesnice
- [n]Stext
- nahradí řádek
- [n]cctext
- přepíše celý řádek
- [n]cobjekttext
- přepíše objekt textem
- [n]stext
- nahradí znak textem
- .
- opakuje jakoukoliv poslední změnu textu.
Př.
Naposledy byl napsán ve vstupním režimu text 'nový telefon 24354259', pak . jej
pokaždé znovu vloží na místo , na které ukazuje kurzor.
- D
- vymaže text od kurzoru do konce řádku
- [n]x
- vymaže znak, na který ukazuje kurzor
- [n]X
- vymaže znak vlevo od kurzoru
- [n]dobjekt
- vymaže objekt
- dd
- vymaže řádek
Př.
dw
d3w
d3(
d5)
dG
- u
- obnoví soubor do stavu před poslední
změnou
- U
- obnoví text aktuálního řádku
- "zásobníkp
- obnoví jedno z posledních devíti smazání
textu. Zásobník je číslo smazání , pro
obnovení posledního smazání se zapíše
9 a pro poslední, které lze obnovit je
zásobník 1.
- [n].
- zopakuje poslední příkaz, který
editoval vyrovnávací paměť editoru
Vi editor má k dispozici devět očíslovaných registrů a jeden
registr skrytý, do nichž ukládá smazaný text. Ty lze využít k
přesunu textu; přesouvaný text se nejprve "vymaže do registru" a
potom se z něj vloží na potřebné místo.
- "rpovel_mazání
- uložení vymazaného textu do registru r;
r může nabývat hodnot a - z. Povely
povel_mazání jsou uvedeny v kap.
Vymazání textu.
- "rp
- vloží vymazaný text z registru r za
kurzor
- "rP
- vloží vymazaný text z registru r před
kurzor
- "p
- vloží poslední vymazaný text za kurzor
- "P
- vloží poslední vymazaný text před kurzor
- :[adresa]m[kam] [volby]
-
přesune řádky definované adresou za řádek
kam. Neuvede-li se kam, zkopíruje řádky
za aktuální řádek.
Př.
Povel
: $-1,$m0
přesune předposlední a poslední řádek souboru na jeho začátek.
- ["r]yobjekt
- uložení objektu do registru ; r může
nabývat hodnot a - z. Nezadá - li se r,
použije se nepojmenovaný registr
Př.
"byL
uloží do registru b text vymezený aktuální
pozicí kurzoru a koncem obrazovky
- ["r][n]yy
- uložení n řádků (standardně jednoho) do
registru ; r může nabývat hodnot a - z.
Nezadá - li se r, použije se nepojmenovaný
registr.
- ["r][n]Y
- jako ["r][n]yy
- ["R]yobjekt
- přidání objektu do registru ; R může
nabývat hodnot A - Z a značí, že objekt
se připojí za text, zapamatovaný
v registru r (a - z).
Př.
Povel
"Ay2w
přidá dvě slova za kurzorem za text, který
je již v registru a.
- ["R][n]yy
- přidání n řádků (standardně jednoho) do
registru ; R může nabývat hodnot A - Z.
Nezadá - li se R, použije se nepojmenovaný
registr.
- ["R][n]Y
- jako ["R][n]yy
- ["r]p
- vlož text z registru r za kurzor;
nezadá-li se r, použije se nepojmenovaný
registr
- ["r]P
- vlož text z registru r před kurzor;
nezadá-li se r, použije se nepojmenovaný
registr
- :[adresa] co [kam] [volby]
- zkopíruje řádky definované adresou za
řádek kam. Neuvede-li se kam, zkopíruje
řádky za aktuální řádek.
- ZZ
- uložení aktuálního souboru, pokud se
změnil a výstup z vi editoru
- :w
- uložení aktuálního souboru
- :w!
- uložení aktuálního souboru i v případě, že
je do něj zakázán zápis
- :sh
- vyvolání nového shellu, po jeho opuštění
návrat zpět do vi
- :q
- opuštění editoru
- :q!
- opuštění editoru s ignorováním změn
- :e soubor
- přechod k editování dalšího souboru
- :e!
- obnovení původního stavu souboru (v jakém
byl tento naposledy uložen)
- :e + soubor
- edituje soubor od jeho konce
- :e + n
- edituje aktuální soubor od n-tého řádku
- :[rozmezí]w[soubor]
- uloží vyrovnávací paměť do souboru
- :[rozmezí]wq! [soubor]
- uloží vyrovnávací paměť do souboru i v
případě, že soubor má zakázán zápis
- :[rozmezí]w>> soubor
- přidá obsah vyrovnávací paměti za konec
souboru
- :[rozmezí]w! povel
- řádky, definované rozmezím zapíše do
standardního vstupu povelu.Ten vykoná
a jeho standardní výstup napíše pouze na
obrazovku, ale neuloží do vyrovnávací
paměti.
Př. 1:
:%w !sort
vypíše na obrazovku setříděný obsah
vyrovnávací paměti.
Př. 2:
:!%sort
setřídí celý text a uloží jej do
vyrovnávací paměti.
Př. 3:
w! sort
uloží "natvrdo" obsah vyrovnávací poměti
do souboru sort
- :e#
- edituje předcházející soubor, pokud bylo
s ním pracováno
- <CTRL>^
- jako :e#
- :e!#
- edituje předcházející soubor, pokud bylo
s ním pracováno , přičemž neuloží změny v
aktuálním souboru
- :! povel
- vyvolá shellovský povel
- :!!
- zopakuje poslední shellovský povel
- :n
- edituje další soubor ze seznamu argumentů,
byl-li editor vyvolán s několika argumenty
- :n!
- před editováním dalšího souboru neuloží
změny v do souboru aktuálníhp
- :n [+povel] soubor...
- definuje nový seznam souborů pro editaci,
je-li uveden povel vi editoru, vykoná se
před editováním prvého souboru
- :args
- zobrazí aktuální seznam editovaných
souborů
- :f
- zobrazí jméno aktuálního souboru a číslo
řádku, obsahujícího kurzor
- <CTRL>g
- jako :f
- :f soubor
- přejde k editaci nového souboru
- :ta návěští
- umístí kurzor na návěští
- :[n]r soubor
- přečte soubor za n-tý řádek do vyrovnávací
paměti; standardně za aktuální
- :[n]r !povel
- přečte obsah standardního výstupu
shellovského povelu a uloží do vyrovnávací
paměti za n-tý řádek
- :rew
- edituje prvý soubor ze seznamu argumentů
při vyvolání vi
- :rew!
- jako :rew, ale neuloží změny v aktuálním
souboru
- :x [soubor]
- pokud byl změněn obsah vyrovnávací paměti,
Globální povel má formát:
:[adresa]g/vzor/povel...
- Povely mohou pokračovat na několika řádcích, které jsou
s výjimkou posledního ukončeny \
- Rozsah řádků, na nichž operuje
globální povel je dán adresou
- nezadá-li se, pak standardně
pracuje s celou vyrovnávací pamětí.
- :[adresa]g/řetězec/
- nastaví kurzor na
poslední řádek,
obsahující řetězec
- :[adresa]g/řetězec/p
- vytiskne všechny
řádky, obsahující
řetězec
- :[adresa]g/řetězec/nu
- vytiskne čísla všech
řádků, obsahující
řetězec
- :[adresa]g/starý/s//nový/
- nahradí prvý výskyt
řetězce starý na každém
řádku řetězcem nový.
Ve všech povelech
náhrady (/s) lze pro
úsporný zápis místo
řetězce starý použít
metaznaku &.
Chceme-li využít
řetězce nový
z přecházejícího
povelu náhrady, můžeme
použít metaznaku ~.
Př.
Prvý výskyt slova malý
na každém řádku chceme
nahradit slovy malý
český:
:g/malý/s//& český/
- :[adresa]g/starý/s//nový/g
- nahradí každý výskyt
řetězce starý na všech
řádcích řetězcem nový
- :[adresa]g/starý/s//nový/gp
- nahradí každý výskyt
řetězce starý na všech
řádcích řetězcem nový
a všechny změněné
řádky vytiskne
- :[adresa]g/starý/s//nový/gc
- před nahrazením
každého výskytu
řetězce starý na všech
řádcích řetězcem nový
vyžaduje schválení.
Odpoví-li se Y, pak se
náhrada provede, jinak
nikoliv.
- :[adresa]g/terč/s/starý/nový/g
- povel nejprve nalezne
všechny řádky,
obsahující terč. Pro
ně pak nahradí každý
výskyt řetězce starý
řetězcem nový.
- :[adresa]g!/vzor/povel
- povel se vykoná na
všech řádcích,
neobsahujících vzor
- :[adresa]v/vzor/povel
- jako
:[adresa]g!/vzor/povel
Př.:
:[adresa]g/^/s// /g
vsune pět mezer před
začátek každého řádku
v celém souboru
- :[adresa]s/vzor/náhrada/volby
- na každém řádku,
který vyhovuje
regulárnímu výrazu
vzor se nahradí prvý
jeho výskyt řetězcem
náhrada. .Volby:
g - náhrada všech
výskytů vzoru na
řádku, c vyžaduje
pokaždé potvrzení
(ano=Y, ostatní
klávesy ne )
- &
- zopakování náhrady
směrem vpřed, rovněž
:&
- :~
- zopakování náhrady
směrem vzad
- <CTRL>?
- zruší přerušení
- i<RETURN>
- rozdělení řádku před kurzorem
- a<RETURN>
- rozdělení řádku za kurzorem
- <CTRL>l
- překreslení obrazovky
- [n]J
- spojení n následujících řádků do
jednoho
- :[rozmezí]j
- spojení řádků definovaných rozmezím
- :[rozmezí]nu
- opíše řádky definované rozmezím, uvozené
jejich čísly
- :[adresa]=
- vypíše číslo řádky s danou adresou.
Př.
Číslo aktuálního řádku se zjistí povelem
:.=
Číslo řádku obsahujícíhob řetězec "heslo"
:/heslo/=
- xp
- vymění znak na který ukazuje kurzor se
znakem předcházejícím
- :abbr zkratka text
- definuje pro delší text zkratku; lze
použít v proměnné prostředí EXINIT nebo
v souboru .exrc
Př.
:abbr pi Ludolfovo číslo
V dalším textu místo Ludolfovo číslo stačí
napsat pi
- :una zkratka
- zrušení zkratky
Př.
:una pi
Řetězec pi ztrácí již význam zkratky
- :mapznak povely
- definice makra, které přiřadí znaku ( i
netisknutelnému ) posloupnost povelů
příkazového režimu vi. Pochopitelně nebude
vhodné měnit znaky, které označují již
povely ve vi editoru ( a,i,r...).
Př.
Chceme nadefinovat makro, které po stisku
<CTRL>A vypíše na nový řádek řetězec Zapsal:
, následovaný uživatelským jménem, aktuálním
datem ve formátu dd.mm.rr a čárkou odděleným
aktuálním časem ve formátu hh:mm. Potřebné
makro má tento tvar:
:map ^A A^M^[:r!echo "Zapsal: $LOGNAME `date "+\%d.\%m.\%y,\%H:\
%M" ` "^[
Připomínám, že ^A značí a a ve vi
editoru se zapíše při stisknuté klávese
postupným stiskem va. Sekvence ^M je
kód pro a ^[ pro . Ve
formátovém řetězci je třeba zamaskovat znak
% pomocí zpětného lomítka, protože % ve vi
editoru representuje aktuální jméno souboru.
- :map!znak povely
- jako map, ale makro nelze zrušit povelem
:unmap
- :unmapznak
- zruší makro, definované povelem map (nikoliv
map!)
- :preserve
- v případě neúspěchu při zápisu do souboru
uloží vyrovnávací paměť vi editoru do
systémové oblasti (pokud je definována).
Použít pouze jako poslední možnost,
nepovede-li se povel :wm.
- :recover soubor
- obnoví soubor ze systémové oblasti, kam byl
uložen při havarii Unixu nebo povelem
:preserve
- :tag cíl
- nastaví kurzor na cíl v aktuálním souboru,
případně v jiném souboru aktuálního
adresáře. Cíl je název vzoru, který musí být
s ním a se jménem souboru jej obsahujícím
uložen v souboru se jménem tags, který je
v aktuálním adresáři. Soubor tags obsahuje
pro každý cíl jeden řádek, obsahující tyto
položky, oddělené mezerami či tabulátory:
-cíl, název na něž se odkazuje povelem tag
-jméno souboru, obsahující cíl
-regulární výraz, který slouží k nalezení
cíle. Ten by měl být konstruován tak, aby
byl pokud možno jednoznačný při opravách
okolního textu. Řádky souboru tags musí být
vzestupně setříděny. Soubor tags se zpravidla
generuje utilitami, např. příkazem ctags,
který jej vytvoří pro zdrojové texty
v jazyce C. Jako cíle tento příkaz považuje
funkce jazyka C. Zadáme-li povel tag bez
argumentu, použije se argument z předchozího
povelu tag. Stiskneme-li ], považuje se
za cíl slovo na kterém stojí kurzor.
Př.:
V aktuálním adresáři máme řadu zdrojových
programů v jazyce C. Příkazem shellu
ctags *.c
se vytvoří v tomto adresáři soubor tags. Při
psaní programu nove_reseni.c vi editorem chceme
opravit funkci iterace_1, přičemž jsme
zapomněli, ve kterém souboru je deklarována.
To však nevadí; povelem vi editoru
:tag iterace_1
se automaticky přepneme do správného souboru
na začátek funkce iterace_1.
- K dispozici řada voleb
- lze je nastavit povely :set, mohou být v proměnné
- prostředí EXINIT , popř. v souboru $HOME/.exrc, či zadávány při editaci
- jsou typu přepínač - aktivní nebo neaktivní
- nebo mají přiřazeny hodnotu - řetězec
- vyhodnocují se zleva doprava.
Nastavení a výpis voleb pomocí :
- :set volba aktivace volby
- :set novolba deaktivace volby
- :set zobrazení voleb, které se změnily
- :set all zobrazení všech voleb
- :set volba? zobrazení nastavení volby
Nejdůležitější volby, ostatní viz man:
- autoindent, zkratka ai, standardně noai
- Nastaví zarovnávání textu.
- autoprint, zkratka ap, standardně ap
- Zobrazí aktuální řádku po každém ex povelu pro
kopírování, přesun nebo náhradu textu.
- errorbells, zkratka eb, standardně noeb
- Chybovému hlášení předchází zvukový signál.
- ignorecase, zkratka ic, standardně noic
- V regulárních výrazech považuje velká písmena za
písmena malá s výjimkou písmen, uzavřených
v závorkách.
- lisp, standardně nolisp
- Zarovnávání textu tak, aby se příjemně psal text v
jazyce Lisp.
- list, standardně nolist
- Text se tiskne s vyznačenými tabelátory (jako ^I ) a konci
řádky (jako $ ).
- magic, standardně magic
- Nastaví-li se volba nomagic, pak v regulárních
výrazech se za metaznaky se zvláštním významem
považují pouze ^ a $
- mesg, standardně nomsg
- Volba nomsg zakáže psát unixové zprávy na obrazovku v
režimu vi - ochrana před přepsáním obrazovky.
- number, zkratka nu, standardně nonu
- Před každým řádkem je zobrazeno jeho číslo.
- shell, zkratka sh, standardně sh=/bin/sh
- Cesta na shell, spouštěný povely :! nebo :sh; je-li
nastavena proměnná prostředí SHELL, pak se vezme její
hodnota jako standardní
- tabstop, zkratka ts, standardně ts=8
- Nastaví tabulátory