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.



















perl
Kopiranje celih redova
Ukoliko zelite mozete prekopirati ceo red (ili vise redova)