Izvor: lugons.org
by Nikola Kotur — last modified Nov 06, 2007 05:34 PM
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.
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 VI
Ekranski editor VI se može naći u jednom od tri moda rada:
Komandni mod: svi znaci otkucani sa tastature se tretiraju kao komande,
Insert mod: 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 (koristim najcesce ‘i’) ali se napuštanje insert moda i povratak u komandni obavlja uvek pritiskom na taster ESC. U mod komandne 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 tasterom ESC kada se mod komandne linije napušta odmah bez izvrsavanja komande.
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+u ili PgUp - strana gore
ctrl+d ili PgDn - strana dole
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
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 teksta
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 – meš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.
PROMENJIVE 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
PRILAGODjAVANJE 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.