Komande editora VI
UNIX operativni sistem standardno prate nekoliko editora teksta. To su pre svega, editori linijskog tipa ed i ex, i ekranski editor vi. Editor vi poseduje sve mogućnosti koje imaju ed i ex i u suštini predstavlja ekranski orijentisan korišnički interfejs ka njima. Po potrebi, vi ih poziva u pozadini, a rezultate koje oni daju, prikazuje na displeju monitora. No bez obzira na to, korisnika ne treba da interesuje veza editora vi sa drugim editorima ili uslužnim programima i može ga posmatrati kao nezavisnu celinu.
Na samom početku treba napomenuti da vi ume da stvori averziju korisnika prema njemu. Relativno je komplikovan za upotrebu jer ima tri moda rada u kojima se funkcije znakova generisanih sa tastature drastično razlikuju. Obično ne koristi kontrolne tastere tipa PageUp, PageDown kao ni funkcijske tastere tako da se komande zadaju sa standardnih tastera i njihovom kombinacijom sa Ctrl. Ne poseduje menije na koje smo navikli kod, uslovno receno user friendly editora (DOS-ov edit, na primer). Međutim, treba imati u vidu da je osnova editora vi definisana početkom sedamdesetih, istovremeno sa početkom razvoja UNIX-a. Još onda je postavljen cilj da vi funkcioniše na raznim tipovima terminala od kojih većina nije imala ni preveliki ni premoćan skup kontrolnih sekvenci, kao ni standardizovan izgled tastature. Naravno, u ovome se uspelo ali je cena plaćena upravo činjenicama koje su pobrojane kao mane ovog editora.
Kao i obično, sve je stvar navike. Nakon boljeg upoznavanja sa vi editorom, svakom korisniku će biti jasno da komande za globalnu zamenu i pretraživanje i rad sa baferima koje on nudi, predstavljaju glavni nedostatak pomenutih user friendly editora.
U daljem tekstu sledi kratak opis određenog skupa komandi vi editora pri čemu je izbor prilagođen potrebama srednjih korisnika. Ako, nakon čitanja ovog teksta, neko i dalje smatra da vi nije editor po njegovoj meri, preporučuju mu se sledeći editori: emacs, joe, jed ili pico s tim što treba imati u vidu da oni nisu standardni deo UNIX distribucija.
Modovi rada editora
Ekranski editor VI se može naći u jednom od tri moda rada:
- komandni - svi znaci otkucani sa tastature se tretiraju kao komande,
- insert -služi za unos teksta, tasteri imaju normalno značenje,
- mod komandne linije -služi za unos dužih komandi.
Nakon startovanja, editor ulazi u komandni mod. Prelazak u insert ili mod komandne linije je jedino moguć iz komandnog moda. Prelazak iz komandnog u insert mod se ostvaruje većim brojem komandi za dodavanje teksta ali se napuštanje insert moda i povratak u komandni obavlja uvek pritiskom na <Esc> taster. U mod zadnje linije je moguće preći jedino komandom ':'. Iz ovog moda se izlazi unošenjem željene komande i njenim izvršavanjem pritiskom na taster <Enter> ili <Esc> tasterom kada se mod zadnje linije napušta odmah.
Poziv editora:
vi file | - postavlja kursor u prvu liniju datoteke file. |
vi + file | - postavlja kursor na zadnju liniju datoteke file. |
vi file1 file2 ... filen | - sukcesivno editovanje više datoteka. Po završetku editovanja jedne, sledeća se poziva sa :next ili skraceno :n. |
Izlaz iz editora:
:wq | - zapiši i izađi |
:q! | - izađi bez zapisivanja — bez obzira na učinjene izmene. |
:w! | - prepiši datoteku iako je 'Read only' |
:x | - Isto kao :wq |
Poziv drugih datoteka:
:e file | - u editor poziva drugu datoteku na editovanje. Nova datoteka briše iz bafera prethodni tekst. |
:r file | - učitava datoteku file i umeće je u tekst ispod tekuće linije. |
Pomeranje kursora:
^ | - pomeranje kurzora na prvi neblanko znak tekuće linije |
$ | - pomeranje kursora na kraj tekuće linije |
<Enter> | - pomeranje kursora na početak naredne linije |
h | - pomera kursor ulevo za jednu poziciju |
j | - pomera kursor nadole za jednu poziciju |
k | - pomera kursor nagore za jednu poziciju |
l | - pomera kursor udesno za jednu poziciju |
NAPOMENA: Obično rade i strelice.
Kretanje kroz prozor:
<Ctrl> f | - pomera ceo prozor unapred kroz datoteku |
<Ctrl> b | - pomera ceo prozor unazad kroz datoteku |
Brojevi linija i pretraživanje:
:n | - postavlja kursor na početak n-te linije |
/string | - pretraživanje datoteku po nizu znakova string unapred |
?string | - pretraživanje datoteke po nizu znakova string unazad |
- |
- ponavlja prethodno pretraživanje unapred |
? | - ponavlja prethodno pretraživanje unazad |
<Ctrl> g | - daje informaciju o tekućoj liniji i datoteci koja se edituje |
UNDO i REPEAT
u | - vraća datoteku na stanje pre izvršavanja poslednje komande |
. | - ponavlja poslednju komandu |
Brisanje teksta:
x | - briše znak ispred kurzora |
X | - briše znak iza kurzora |
:i,jd | - briše tekst od i-te do j-te linije |
dd | - briše tekuću liniju |
dw | - briše tekuću reč |
Izmene teksta:
s | - zamenjuje znak ispod kursora novootkucanim tekstom. Završava se sa <ESC>. |
r | - zamenjuje samo znak ispod kursora |
cw | - zamenjuje tekst od kursora do kraja reči novim tekstom |
:i,js/tekst1/tekst2/option | - od i-te do j-te linije, zameni tekst1 sa tekst2. |
:i,jg/tekst/s/tekst1/tekst2/option | - od i-te do j-te linije, u linijama koje sadrže tekst, zameni tekst1 sa tekst2. |
Komande za globalnu zamenu mogu da imaju i dodatni parametar option. Bez argumenta option, u svakoj liniji će se izvršiti maksimalno jedna zamena teksta tekst1 i to na mestu njegovog prvog pojavljivanja. Ako se isti tekst pojavljuje više puta u istoj liniji, na ostalim mestima ostaje nepromenjen. Ako je option jednak g onda se zamena obavlja globalno. Traženi tekst koji se pojavljuje više puta u istoj liniji, biće zamenjen na svim mestima. Takođe je korisna i opcija c koja omogućava globalnu zamenu ali uz verifikaciju. Kada se traženi tekst pronađe, od korisnika se očekuje da sa y ili n kaže da li pronađeni tekst treba zameniti ili ne.
primeri:
:1,$s/srdan/srdjan/g
od prve do zadnje linije menja 'srdan' sa 'srdjan'
:1,$s/^/tekst/
svakoj liniji dodaje 'tekst' na početak
:1,$s/$/tekst/
svakoj liniji dodaje 'tekst' na kraj
Unos teksta
a | unošenje teksta počev od pozicije prve udesno od pozicije kursora. Unos se završava pritiskom na taster <ESC>. |
i | unošenje teksta počev od tekuće pozicije kursora. Unos se završava pritiskom na taster <ESC>. |
o | kreira novu liniju ispod tekuće i ulazi u 'insert' mod. Unos se završava pritiskom na taster <ESC>. |
O | kreira novu liniju iznad tekuće i ulazi u 'insert' mod. Unos se završava pritiskom na taster <ESC>. |
Rad sa baferima
VI poseduje dve vrste bafera: neimenovane i imenovane. Neimenovanih ima 9 a referenciranje na njih se obavlja navođenjem njihovog rednog broja. Komande dd i yy menjaju sadržaj ovih bafera tako što se novi sadržaj uvek upisuje u prvi a pri tome se stari sadržaj bafera pomera iz prethodnog u naredni (rade kao pomerački registri) pri čemu se sadržaj poslednjeg (devetog) gubi. Imenovanih bafera ima 26 a imena im se sastoje od slova engleske abecede. Mala i velika slova predstavljaju fizički iste bafere ali se u radu razlikuju. Na primer, zapis u bafer a briše njegov prethodni sadržaj dok je zapis u bafer A zapis u isti bafer ali se novi sadržaj dodaje prethodnom.
dd | briše tekuću liniju i smešta njen sadržaj u neimenovani bafer. |
p | štampa sadržaj prvog neimenovanog bafera ispod tekuće linije |
P | štampa sadržaj prvog neimenovanog bafera iznad tekuće linije |
yy | smešta tekuću liniju u neimenovani bafer (ne briše ju) |
"anyy | pamti u baferu 'a' n linija |
"ap | štampa sadržaj bafera a ispod tekuće linije. |
"np | štampa sadržaj n-tog neimenovanog bafera ispod tekuće linije |
Sastavljanje i rastavljanje linija:
<Shift> j - sastavlja tekuću i narednu liniju;
Multipliciranje komandi
Instrukcije komandnog moda je moguće multiplicirati, jednostavno navođenjem željenog broja pre unosenja komande. Ovo može biti izuzetno korisno. U nekim primerima prikazanim do sada, ovo je već korišćeno. Na primer, komanda 10x briše deset znakova desno od kurzora, 10dd briše 10 linija, i slično.
Promenljive VI-a
Slično kao komandni interpreter, i VI poseduje neke ugrađene promenljive, koje ako su postavljene, menjaju ponašanje editora. Na sve promenljive ovog tipa se može uticati :set komandom. Na primer:
:set nu | prebacuje VI u displej mod gde je, osim sadržaja datoteke, na početku prikazan i redni broj linija. Ovo može biti od koristi jer velik broj komandi koristi redne brojeve linija kao argumente. |
:set nonu | je suprotno od :set nu |
:set showmode | na kraju zadnje linije će se prikazivati trenutni mod rada editora (komandni ili insert). |
:set noshowmode | je suprotno od :set showmode |
:set showmatch | editor će prikazivati uparenost zagrada '(){}[]' sto je vrlo korisno u razvoju programa. |
:set noshowmatch | je suprotno od :set showmatch |
Komande za zapisivanje
:i,jw file2 | zapisuje tekst od i-te do j-te linije u file2 |
:w file2 | zapisuje celu datoteku pod drugim imenom file2 |
:w>> file2 | čitav sadržaj zapisuje na kraj datoteke file2 |
Prilagođavanje VI editora svojim potrebama
Prilagođavanje VI-a se obavlja vrlo jednostavno. U $HOME direktorijumu treba kreirati datoteku .virc (ili ukoliko koristite noviji editor Vim onda .vimrc) i u nju uneti sve komande koje će se izvršiti inicijalno, nakon pozivanja editora. Na primer, ako .virc sadrži sledeće komande:
:set showmode
:set nu
:set showmatch
nakon poziva, VI automatski ulazi u showmode, nu i showmatch mod.
Document Actions