VI - textovy editor
(M.Mach)
Pozn: Znaky <text> oznacuju miesto, kde sa vklada
specificky text (jeho obsah zavisi na kontexte). Znaky [] oznacuju volitelnost.
Text medzi nimi moze alebo nemusi byt. Samotne znaky [] sa nevkladaju. Stlacenie
klavesy je oznacene <KLAVESA>. Konstrukcia <KLAVESA> +
<klavesa> oznacuje sucasne stlacenie dvoch klaves. Ak nie je uvedene inak,
tak v pripade, ze [<n>] nie je dane, implicitne sa uvazuje hodnota 1.
Znaky <retazec> oznacuju lubovolny (aj viacriadkovy) text.
Ako sa startuje a ukoncuje praca s editorom?
vi - editacia noveho suboru (bez priradeneho mena)
vi <subor> - zaciatok editacie konkretneho suboru
vi <subor1> <subor2> ... - editacia viacerych
suborov
:q<ENTER> - ukoncenie (ak nie su neulozene zmeny v
texte)
:q!<ENTER> - ukoncenie prace (neulozene zmeny sa
stratia)
ZZ - ukoncenie prace (ak je potrebne, zmeny sa najprv
ulozia)
Ako mozem pracovat so subormi?
Ako pracovat s jednym suborom?
(<rozsah> je implicitne cely
text; inak moze byt napr. stanoveny cislami dvoch riadkov v tvare
<r1>,<r2>):
:[<rozsah>]w<ENTER> -zapis textu do suboru s
implicitnym menom (ak existuje, bude prepisany)
:[<rozsah>]w <subor><ENTER> - zapis textu
do suboru (iba ak tento este neexistuje)
:[<rozsah>]w! <subor><ENTER> - zapis textu
do suboru (ak existuje, bude prepisany)
:[<rozsah>]w >><subor><ENTER> -
zapis textu na koniec suboru (iba ak tento subor uz existuje)
:[<rozsah>]w! >><subor><ENTER> -
zapis textu na koniec suboru (ak neexistuje, bude vytvoreny)
:[<riadok>]r <subor><ENTER> - obsah suboru
sa vlozi za specifikovany riadok. Implicitne za aktualny.
:f <subor><ENTER> - zmena implicitneho mena
suboru (pre prikazy ZZ a :w)
Ako pracovat s viacerymi subormi?
:n<ENTER> - prechod na dalsi subor (ak nie su ziadne
neulozene zmeny v texte)
:n!<ENTER> - prechod na dalsi subor
:rewind<ENTER> - prechod na prvy subor (ak nie su
ziadne neulozene zmeny vtexte)
:rewind!<ENTER> - prechod na prvy subor
+^ - navrat na posledne editovany subor
:e <subor><ENTER> - prechod na zadany subor
Ake su moznosti pre ovladanie polohy kurzora?
[<n>]k ( [<n>]j ) - n riadkov
nahor (nadol)
[<n>]h ( [<n>]l ) - n pozicii
vlavo (vpravo)
0 - na prvy znak aktualneho riadku
^ - na prvy neprazdny znak v aktualnom riadku
[<n>]| - na n-tu poziciu v aktualnom riadku
[<n>]$ - nadol o n-1 riadkov na posledny znak
[<n>]+ ( [<n>]- ) - n riadkov
nadol (nahor) na prvy neprazdny znak v riadku
[<n>]G - na riadok cislo n (implicitne posledny
riadok)
[<n>]+f ( [<n>]+b )
- n stran nadol (nahor)
[<n>]L ( [<n>]H ) - na n-ty
riadok od konca (zaciatku) obrazovky
M - na stredny riadok na obrazovke
[<n>]+e ( [<n>]+y )
- rolovanie obrazovky o n riadkov nahor (nadol)
[<n>]w - o n slov dopredu, kurzor na zaciatok slova
[<n>]b - o n-1 slov spat, kurzor na zaciatok slova
[<n>]e - o n-1 slov dopredu, kurzor na koniec slova
Ako mozem vlozit text?
[<n>]i<retazec><ESC> - pred kurzor vlozi
n-krat text
[<n>]I<retazec><ESC> - pred prvy neprazdny
znak na aktualnom riadku vlozi n-krat text
[<n>]a<retazec><ESC> - za kurzor vlozi
n-krat text
[<n>]A<retazec><ESC> - na koniec
aktualneho riadku sa vlozi n-krat text
o<retazec><ESC> - za aktualny riadok vlozi novy
riadok a do neho vlozi text
O<retazec><ESC> - pred aktualny riadok vlozi
novy riadok a do neho vlozi text
Ako mozem zrusit text?
[<n>]x - zrusi znak pod kurzorom a n-1 nasledujucich
znakov v aktualnom riadku
[<n>]X - zrusi znak pred kurzorom a n-1
predchadzajucich znakov v aktualnom riadku
[<n>]dw - zrusi znaky od kurzoru az do konca slova a
n-1 nasledujucich slov
[<n>]d$ - zrusi znaky od kurzoru az do konca riadku a
n-1 nasledujucich riadkov
[<n>]dd - zrusi aktualny riadok a n-1 nasledujucich
riadkov
[<n>]dL ( [<n>]dH ) - zrusi
znaky od kurzora po n-ty riadok od konca (zaciatku) obrazovky
d0 - zrusi znaky od zaciatku riadku az po kurzor
:<r1>,<r2>d<ENTER> - zrusi riadky r1 az r2
:<r>d<n><ENTER> - zrusi n riadkov pocnuc
riadkom r
Ako mozem nahradit text?
[<n>]r<znak> - nahradi znak pod kurzorom a
nasledujucich n-1 znakov znakmi
[<n>]R<retazec><ESC> - od pozicie kurzora
tolko znakov, kolko ich obsahuje, nahradi n vyskytmi retazca
[<n>]cw<retazec><ESC> - znaky od kurzoru
az do konca slova a n-1 nasledujucich slov nahradi textom
[<n>]c<retazec><ESC> - znaky od kurzoru az
do konca riadku a n-1 nasledujucich riadkov nahradi textom
[<n>]cc<retazec><ESC> - aktualny riadok a
n-1 nasledujucich riadkov nahradi textom
c0 - nahradi znaky od zaciatku riadku az po kurzor
[<n>]s<retazec><ESC> - znak pod kurzorom a
n-1 nasledujucich znakov nahradi textom
Ako mozem kopirovat text?
Text nie je mozne kopirovat priamo ale iba
prostrednictvom implicitneho bufra alebo jedneho z bufrov oznacenych a - z. Ak
sa neuvadza meno bufra,pracuje sa s implicitnym.
Ako realizovat prenos do bufra?
["<bufer>][<n>]yw - kopiruje znaky od kurzoru az
do konca slova a n-1 nasledujucich slov
["<bufer>][<n>]y$ - kopiruje znaky od kurzoru az
do konca riadku a n-1 nasledujucich riadkov
["<bufer>][<n>]yy - kopiruje aktualny riadok a
n-1 nasledujucich riadkov
["<bufer>]y0 - kopiruje znaky od zaciatku riadku az po
kurzor
["<bufer>][<n>]yL (
["<bufer>][<n>]yH ) - kopiruje od kurzora po n-ty
riadok od konca (zaciatku) obrazovky
Pozn: ak sa ako meno bufra uvedie velke pismeno, ma to za nasledok
pripojenie textu k obsahu bufra.
Ako realizovat prenos z bufra do
textu?
["<bufer>][<n>]p - obsah bufra vlozi
n krat za kurzor
["<bufer>][<n>]P - obsah bufra vlozi n krat pred
kurzor
Ako mozem vratit text do povodneho stavu?
Mozem obnovit text po lubovolnej modifikacii
textu?
u - zrusenie posledneho prikazu, modifikujuceho
text (pri pouziti v tele makra rusi vsetky zmeny textu vykonane od zaciatku tela
makra)
U - zrusenie vsetkych zmien aktualneho riadku od vstupu
kurzora na tento riadok
Mozem obnovit text po zruseni textu?
Zruseny text je umiestnovany do
implicitneho bufra. Odtial ho mozno prekopirovat spat do textu. Okrem toho
existuje 9 bufrov oznacenych cislicami 1 az 9. Ak su rusene cele riadky, tak
tieto sa ukladaju do bufra 1, obsah bufra 1 sa presunie do bufra 2 atd. Obnovit
zruseny text z niektoreho bufra
"<bufer>[<n>]p - obsah bufra vlozi n-krat za
kurzor
"<bufer>[<n>]P - obsah bufra vlozi n-krat pred
kurzor
Ako mozem v texte
vyhladavat?
/<retazec><ENTER> - hladanie
retazca <retazec> od pozicie kurzora smerom dopredu
?<retazec><ENTER> - hladanie retazca
<retazec> od pozicie kurzora smerom spat
n ( N ) - pokracuje v hladani posledne
hladaneho retazca v rovnakom (opacnom) smere
[<n>]f<znak> - v aktualnom riadku od kurzora ku
koncu riadku hlada dany znak a zastane na nom
[<n>]F<znak> - v aktualnom riadku od kurzora k
zaciatku riadku hlada dany znak a zastane na nom
[<n>]t<znak> - v aktualnom riadku od kurzora ku
koncu riadku hlada dany znak a zastane pred nim
[<n>]T<znak> - v aktualnom riadku od kurzora k
zaciatku riadku hlada dany znak a zastane za nim
Ako mozem v texte vyhladavat a
nahradzat?
:[<rozsah>]s/<stary ret.>/<novy
ret.>/[g][c]<ENTER>
Rozsah je implicitne aktualny riadok. Inak moze byt napr. stanoveny dvoma
riadkami vo forme <r1>,<r2> alebo cely subor dany znakom % Znaky na
konci prikazu:
c - vyzaduje sa potvrdenie nahrady
g - nahrada sa tyka vsetkych vyskytov v danom rozsahu
Ako si zapamatat poziciu v texte?
Do textu je mozne vsuvat znacky.
Celkove je moznych tolko znaciek, kolko je malych pismen abecedy. Znacky su
oznacene a - z. Zavedenie znacky:
m<znacka>
Niektore moznosti vyuzitia:
`<znacka> - nastavenie kurzora na znacku
'<znacka> - nastavenie kurzora na riadok so znackou
y`<znacka> - kopirovanie textu od kurzora po znacku
d`<znacka> - rusenie textu od kurzora po znacku
c`<znacka> - nahrada textu od kurzora po znacku
:'<znacka>,.w <subor><ENTER> - ulozenie
textu od znacky po aktualny riadok do suboru
Ako pri editovani vyuzit ostatne programy?
Je mozne zadat prikaz
operacneho systemu
:!<unix prikaz><ENTER>
Ak chceme vysledok prikazu vlozit do textu tak prikaz
:[<riadok>]r!<unix prikaz><ENTER>
tento vysledok vlozi za specifikovany riadok (implicitne za aktualny
riadok).
Ak je potrebne nejaku cast textu spracovat externym programom (napr.
sort,grep, expand ap.) a nahradit ju vysledkom tohto spracovania, potom je mozne
pouzit napr.:
!`<znacka><unix prikaz><ENTER> - pre
oblast od kurzora po znacku v texte
!}<unix prikaz><ENTER> - od kurzora po koniec
paragrafu
!!<unix prikaz><ENTER> - pre aktualny riadok
!G<unix prikaz><ENTER> - od kurzora po koniec
suboru
Ako mozem definovat makra?
Zobrazenie momentalne definovanych makier
:map<ENTER> - makra pre prikazovy rezim
:map!<ENTER> - makra pre vkladaci rezim
Definicia makier
:map <volanie makra> <telo makra><ENTER>
:map! <volanie makra> <telo makra><ENTER>
Makro moze byt volane stlacenim jednej klavesy alebo sekvencie klaves. Pri
zobrazitelnych znakoch sa zada priamo ten znak alebo sekvencia znakov. Pri
zadavani nezobrazitelnych znakov kazdy z nich musi byt uvedeny kombinaciou
<CTRL>+v napr.:
:map <CTRL>+v<F1> :!more vihelp
alebo
:map! <CTRL>+v<sipka dole>
<CTRL>+v<ESC>ja ).
Pozn: pri volani makra sekvenciou klaves tieto musia byt stlacene v kratkom
intervale, inak su povazovane za samostatne znaky.
S ktorymi makrami pre ulahcenie prace mam zacat?
Vkladaci rezim:
pohyb smerovymi sipkami
map! <CTRL>+v<sipka nahor> <CTRL>+v<ESC>ka
map! <CTRL>+v<sipka nadol> <CTRL>+v<ESC>ja
map! <CTRL>+v<sipka vlavo> <CTRL>+v<ESC>ha
map! <CTRL>+v<sipka vpravo> <CTRL>+v<ESC>la
mazanie znaku pod kurzorom
map! <CTRL>+v<Del> <CTRL>+v<ESC>lxi
mazanie znaku pred kurzorom
map! <CTRL>+v<Backspace> <CTRL>+v<ESC>xi
Prikazovy rezim:
hladanie dopredu podla slova pod kurzorom
map =/
moI<Space><CTRL>+v<ESC>`olT<Space>moi/<CTRL>+v<ESC>"odEu`
o@o<CTRL>+v<ENTER>
v ELM vlozenie obsahu nejakej posty do pripravovanej posty (cislo vkladanej
posty je pod kurzorom)
map =m
moI<Space><CTRL>+v<ESC>`olT<Space>i!!readmsg<Space><CTRL>+v<ESC>2b"o3de
@o<CTRLv+v<ENTER>
Ako si skratit pracu skratkami?
Editor dovoluje definovat skratky,
ktore potom sam rozvija na plny tvar.Skratku je mozne definovat
:ab <skratka> <plny rozvinuty tvar><ENTER>
a potom vo vkladacom rezime napisat <skratka><SPACE> alebo
<skratka><ENTER>a skratka sa automaticky nahradi svojim plnym
tvarom.
Ako prisposobit nastavenie editora?
Momentalne nastavenie editora je
mozne zistit prikazom
:set all<ENTER>
Jednotlive volby mozu byt alebo logicke alebo mozu mat numericku hodnotu. Je
ich mozne nastavit
:set <volba><ENTER>
:set <volba>=<hodnota><ENTER>
Niektore zaujimave volby:
(no)magic - (ne)povoluje regularne vyrazy pri hladani
pomocou / ci ? a pri hladani s nahradou
(no)wrapscan - (ne)povoluje pri hladani pomocou / a ?
cyklicky prechod z konca textu na jeho zaciatok a naopak
(no)list - (vypina)zapina zobrazovanie tabelatorov a koncov
riadkov
(no)showmatch - (vypina)zapina zobrazovanie protilahlych
zatvoriek
(no)ignorecase - pri hladani (rozoznava)nerozoznava velke a
male pismena
(no)autoindent - (vypina)zapina zarovnavanie podla prveho
neprazdneho znaku predchadzajuceho riadku
(no)showmode - (vypina)zapina indikaciu rezimu vkladania
(nie je dostupne v kazdej verzii VI)
(no)number - (vypina)zapina cislovanie riadkov
wrapmargin=<hodnota> - ak kurzor dosiahne zadaneho poctu
znakov od konca riadku, automaticky prechod na novy riadok (hodnota 0 vypina
tento prechod)
Ako vytvorit konfiguracny subor?
Je mozne vytvorit subor s menom
.exrc v domovskom adresari. Tento moze obsahovat definicie
map <volanie makra> <telo makra>
map! <volanie makra> <telo makra>
set <volba>
set <volba>=<hodnota>
ab <skratka> <plny rozvinuty tvar>
spolu s komentarovymi riadkami (zacinaju znakom " ).
Ak obsahuje aj riadiace znaky, potom postup jeho vytvorenia je zlozitejsi.Je
to mozne napr.:
- vo VI sa vytvori ako text
- nastavit kurzor na jeho zaciatok a zakodovat, napr.
- !Guuencode .exrc
- nastavit kurzor na zaciatok riadku begin 666 .exrc (mozu
byt uvedene ine pristupove prava) a ulozit v rozkodovanom tvare
- !Guudecode
Existuju este nejake zaujimave moznosti editora?
Je ich vela.
Niektore z nich:
+g - na spodnom riadku sa zobrazi okrem ineho cislo
aktualneho riadku a priznak modifikovanosti textu
[<n>]. - n-krat sa zopakuje posledny prikaz, ktory
modifikoval text
% - ak je kurzor na zatvorke, presunie sa na odpovedajucu
opacnu zatvorku
[<n>]J - spojenie aktualneho a n-1 nasledujucich
riadkov do jedneho riadku (implicitne sa spajaju dva riadky)
~ - male pismeno pod kurzorom sa nahradi velkym a naopak
[<n>]>> ( [<n>]<< )
- posun n riadkov o tabelator vpravo (vlavo)
@<bufer> - obsah bufra sa vykona ako sekvencia
prikazov