Poglavlje 16 Vi Tabela sadržaja 16.1 Pokretanje programa vi 16.2 Modovi 16.3 Otvaranje datoteka 16.4 Spremanje datoteka 16.5 Zatvaranje programa vi 16.6 Vi postavke 16.7 Vi tipke vi(1) je standardni Unix program za uređivanje teksta, i mada njegovo savlađivanje nije nužno kao što je nekada bilo, još uvijek je cilj vrijedan truda. Postoji nekoliko verzija programa vi koje su dostupne, uključujući vi, elvis, vile i vim. Jedan od ovih je dostupan na svakoj verziji Unix-a, a također i na Linux-u. Sve ove verzije imaju iste osnovne funkcije, postavke i naredbe, tako da ako naučite jedan od njih, vrlo lako ćete moći koristiti i neki drugi. Sa raznovrsnošću uređivača teksta koji su uključeni u Linux distribucije i Unix varijante ovih dana, mnogi ljudi više ne koriste vi. Ali on i dalje ostaje najuniverzalniji uređivač teksta u Unix-u i njemu sličnim sustavima. Savladavanje vi-a znači da nikada ne biste trebali sjediti za Unix računalom, a da se ne osijećate udobno u bar jednom od moćnih uređivača teksta. Vi ima brojne moćne osobine uključujući bojanje teksta prema sintaksi, formatiranje koda, moćan mehanizam za pretragu i zamjenu, makro-e i još mnogo toga. Ove osobine ga čine posebno atraktivnim za programere, tvorce web aplikacija i njima slične. Sustavski administratori će znati da cijeniti automatizaciju i integraciju sa školjkom (shell-om) koja je moguća. Na Slackware Linux-u, verzija Vi koja je dostupna je elvis. Druge verzije, uključujući vim i gvim su također dostupne ukoliko ste namjestili odgovarajuće pakete. Gvim je X Window verzija vim-a koja uključuje palete sa alatima, izbornike i prozore. 16.1 Pokretanje programa vi vi može biti pokrenut iz komandne linije na razne načine. Najednostavnije je samo: % vi Figure 16-1. Vi sesija Ovo će pokrenuti vi sa praznim međuspremnikom (buffer). U ovom trenutku, uglavnom ćete videti prazan ekran. On je sada u ?komandnom modu?, čeka da vi uradite nešto. Za opis raznih vi modova pogledajte Section 16.2. Kako biste izašli iz programa vi, utipkajte slijedeće: :q Ako pretpostavimo da nije bilo promjena u datoteci, ovo će rezultirati izlaskom iz programa vi. Ako su bile napravljene neke promjene, on će vas upozoriti da je datoteka promjenjena i objasniti vam kako da te promjene ignorirate. Ignoriranje promjena obično znači dodavanje uskličnika poslije ?q?, pa tako: :q! Uskličnik obično znači da se neka akcija izvede na silu. Kasnije ćemo razmotrit tu i ostale kombinacije tipki detaljnije. Također možete pokrenuti vi sa datotekom koja već postoji. Na primer, datoteku /etc/resolv.conf bi otvorili ovako: % vi /etc/resolv.conf Konačno, vi može biti pokrenut sa kurzorom na željenoj liniji u datoteci. Ovo je posebno koriszno za programere, kada poruka o grešci ispiše liniju u kojoj je program stao. Na primjer, vi pokrećete na liniji 47 datoteke /usr/src/linux/init/main.c ovako: % vi +47 /usr/src/linux/init/main.c vi će prikazati danu datoteku i postavit će kurzor na željenu liniju. U slučajevima kada naznačite liniju koja je poslije kraja datoteke, vi će staviti kurzor u poslijednju liniju. 16.2 Modovi vi radi u različitim modovima, koji se koriste za različite zadatke. Kada prvi put pokrenete vi, postavljeni ste u komandni mod. Odavdje možete izdavati razne naredbe za manipulaciju tekstom, premještati datoteku, spremati, izaći iz programa i menjati modove. Uređivanje teksta se radi u insert modu. modove možete brzo mijenjati preko tipki koje su objašnjene ispod. 16.2.1 Komandni mod Na početku ste stavljeni u komandni mod. Iz ovog moda ne možete direktno unositi tekst ili uređivati ono šte se već tamo nalazi. Međutim, možete manipulirati tekstom, tražiti, zatvoriti, spremiti, otvoriti novu datoteku i još mnogo toga. Ovo je zamišljeno kao uvod u komandni mod. Za opis raznih komandi pogledajte Section 16.7. Vjerovatno najčešće korištena komanda u komandnom modu je promjena u insert mod. Ovo se postiže pritiskanjem tipke i. Kurzor mijenja oblik i pojavljuje se -- INSERT -- na dnu ekrana (zapamtite da se ovo ne događa na svim vi klonovima). Odtad, svi vaši unosi se pojavljuju u trenutnom međuspremniku (buffer) i prikazuju se na ekranu. Da biste se vratili u komandni mod pritisnite tipku ESCAPE. U komandnom modu se također krećete po datoteci. Na nekim sustavima možete koristiti tipke sa strelicama da biste se kretali. Na drugim, možda ćete morati koristiti tradicionalne tipke ?hjkl?. Evo spiska kako se ove tipke koriste za kretanje: h pomakni kurzor lijevo za jedno slovo j pomakni kurzor dolje za jedno slovo k pomakni kurzor gore za jedno slovo l pomakni kurzor desno za jedno slovo Jednostavno pritisnite taster da pomaknete kurzor. Kao što ćete vidjeti kasnije, ove tipke mogu biti kombinirane sa brojkom radi efikasnijeg pomicanja. Mnoge od naredbi koje ćete koristiti u komandnom modu počinju sa dvotočkom. Na primjer, izlazak iz programa je :q, kao što smo već napisali ranije. Dvotočka jednostavno naznačuje da je to komanda, dok ?q? govori programu vi da završi sa radom. Druge naredbe su opcionalni broj kojeg prati slovo. Ove naredbe nemaju dvotočku ispred i koriste se za manipulaciju tekstom. Na primer, brisanje jedne linije iz datoteke se postiže pritiskanjem dd. Ovo će ukloniti liniju na kojoj je kurzor. Izdavanje naredbe 4dd će reći programu vi da ukloni liniju na kojoj je kursor i još tri poslije nje. Općenito brojevi govore programu vi koliko puta da izvrši komandu. Možete kombinirati broj sa tipkama za kretanje kako biste preskakali nekoliko slova odjednom. Na primjer, 10k će skočiti za deset linija gore na ekranu. Komandni mod takođe može biti iskorišten za rezanje i lijepljenje, ubacivanje teksta i učitavanje drugih datoteka u trenutni međuspremnik. Kopiranje teksta se postiže sa y tipkom (y stoji za yank). Kopiranje trenutne linije se radi sa yy, a ovo može biti sa brojem prefiksom kako bi se kopiralo više linija. Onda se prebacite na mjesto gdje želite tekst zalijepiti i pritisnite p . Tekst će biti nalepljen na liniju iza trenutne. Rezanje teksta se izvršava utipkavanjem dd. nakon toga p možemo izkoristiti za lijepljenje teksta nazad u datoteku. Učitavanje teksta iz druge datoteke je jednostavna procedura. Samo utipkajte :r, slijeđen razmakom i imenom datoteke koji sadrži tekst kojeg treba ubaciti. Sadržaj datoteke će biti nalepljen u trenutni međuspremnik na liniji poslije kurzora. Napredniji vi klonovi čak sadrže dopunjivanje imena datoteke slično školjci (shell). Poslijednja upotreba koja će biti opisana je pretraga. Komandni mod dozvoljava jednostavnu pretragu, ali također i komplicirane traži-i-zamijeni naredbe koje koriste moćnu verziju regularnih izraza. Iscrpna diskusija o regularnim izrazima je izvan opsega ovog dijela teksta, pa će ova sekcija pokriti samo jednostavne načine pretrage. Jednostavna pretraga se vrši pritiskanjem tipke /, pa zatim teksta kojeg tražite. Vi će tražiti unaprijed od kurzora do kraja datoteke, zaustavljajući se kada pronađe to što tražite. Primijetite da će netočna poklapanja također natejrati vi da stane. Na primjer, potraga za ?the? će rezultirati zaustavljanje na ?then?, ?therefore?, i tako dalje. Ovo se događa jer sve od ovih riječi imaju u sebi ?the?. Kada vi nađe prvo poklapanje, možete nastaviti jednostavnim pritiskanjem tipke / pa zatim enter. Također možete tražiti unazad ukoliko znak za dijeljenje zamijenite sa znakom ?. Na primjer, traženje unazad za ?the? možete postići sa ?the. 16.2.2 Insert mod Unošenje i zamjena teksta se vrši u insert modu. Kao što je prije rečeno, u insert mod možete doći tako da pritisnete i u komandnom modu. Tada, sve što utipkate unosi se u trenutni međuspremnik. Pritiskanje tipke ESCAPE vas vraća u komandni mod. Zamijena teksta se izvršava na nekoliko različitih načina. Iz komandnog moda, pritiskanje tipke r će vam dopustiti da zamijenite jedno slovo pod kurzorom. Samo pritisnite novo slovo i ono će zamijeniti ono ispod kurzorom. Odmah poslije toga opet ćete biti stavljeni u komandni mod. Pritiskanje R vam dozvoljava da zamijenite željeni broj slova. Da biste izašli iz moda za zamijenu, pritisnite ESCAPE i vratit ćete se u komandni mod. Postoji još jedan način prebacivanja između ubacivanja i zamijene. Pritiskanje tipke INSERT u komandnom modu će vas staviti u insert mod. Jednom kada ste u tom modu, tipka INSERT služi za preklapljanje između ubacivanja i zamijene. Kada ju jednom pritisnete, dozvolit će vam zamijenu. Još jednom ga pritisnite i bit će vam dozvoljeno da ubacujete tekst. 16.3 Otvaranje datoteka vi vam dozvoljava otvaranje datoteka bilo iz komandnog moda, ili iz naredbene linije. Da biste otvorili datoteku /etc/lilo.conf: :e /etc/lilo.conf Ako ste napravili promijene u trenutnom međuspremniku, bez spremanja, vi će se žaliti. Uvijek možete otvoriti datoteku bez spremanja trenutnog međuspremnika utipkavanjem :e!, pa zatim razmakom i imenom datoteke. Ako želite ponovno otvoriti trenutnu datoteku, to možete učiniti tako, da samo utipkate e!. Ovo je posebno koristno ukoliko ste nekako uništili datoteku i želite ju opet otvoriti. Neki vi klonovi (na primjer, vim) dozvoljavaju da imamo istovremeno otvorenih više međuspremnika. Na primjer, kako bih otvorili datoteku 09-vi.sgml u početnom direktoriju, dok je otvorena neka druga datoteka, utipkamo: :split ~/09-vi.sgml Nova datoteka je prikazana na gornjoj polovici ekrana, a stara datoteka je prikazana na doljnjoj polovici. Postoji mnogo naredbi koje manipuliraju podijeljenim ekranom, a mnoge od ovih naredbi sliče Emacs-ovim. Najbolje mjesto za traženje ovakvih naredbi je man stranica vašega vi klona. Primjetite da mnogi klonovi ne podržavaju ideju podijeljenog ekrana, pa je možda nećete moći koristiti. 16.4 Spremanje datoteka Postoji nekoliko načina da spremite datoteku u vi-u. Ukoliko želite spremiti trenutni međuspremnik u datoteku randomness, utipkajte: :w randomness Jednom kada spremite datoteku, ponovno spremanje se vrši jednostavnim :w. Svaka promijena će biti zapisana u datoteku. Kada je datoteka spremljena, stavljeni ste ponovno u komandni mod. Ukoliko želite spremiti datoteku i izaći iz programa vi, utipkajte :wq. Ovo govori vi programu da spremi trenutnu datoteku i izađe nazad u školjku. Ponekad, željet ćete spremiti datoteku koja je označena samo za čitanje. Ovo možete napraviti tako, da dodate uskličnik nakon naredbe za spremanje: :w! Međutim, i dalje će postojati slučajevi kada nećete moći spremiti datoteku (na primjer, pokušaj uređivanja datoteke čiji vlasnik je neki drugi korisnik). Kada se to dogodi vi će vam reći da ne može spremiti datoteku. U slučaju da stvarno želite urediti tu datoteku, morat ćete se vratiti i urediti datoteku kao root ili korisnik koji je vlasnik te datoteke. 16.5 Zatvaranje programa vi Jedan od načina za izlazak iz programa vi je :wq, što će spremiti trenutni međuspremnik prije izlaska. Također možete ugasiti program bez spremanja sa :q ili (češće) :q!. Posljednja varijanta se koristi kada ste promijenili datoteku, ali ne želite spremiti te promjene. Ponekad, vaše računalo se može srušiti, ili se može srušiti program sam vi. Međutim, i elvis i vim će učiniti sve, da se smanji šteta učinjena nad otvorenim mequspremnicima. Oba editora spremaju otvorene međuspremnike u privremenu datoteku. Ova datoteka je najčešće slično imenovana kao i otvorena, ali sa točkom na početku. Time se postiže sakrivanje datoteke. Ova privremena datoteka se automatsko izbriše, kad program zatvorimo u normalnim okolnostima. To znači da će privremena kopija još uvijek biti tu ukoliko se nešto nepredviđeno dogodi. Kad se vratite opet uređivat datoteku, program će vas pitati šta da napravi. U većini slučajeva, veliki dio vašeg nespremljenog posla može biti vraćen. elvis će vam također poslati e-poruku (iz Gracelanda, vjerovali ili ne :) u kojoj će vam javiti da postoji rezervna kopija. 16.6 vi postavke Vaš izabrani vi klon može biti podešen na nekoliko načina. Razne naredbe mogu biti unešene dok ste u komandnom modu kako bi se vi konfigurirao tako da bude baš onakav kakvim ga želite. Ovisno od vašeg uređivača teksta, možete uključiti postavke koje programiranje čine lakšim (kao što su bojanje teksa, automatska identacija i drugo), postaviti makro-e za automatske zadatke, uključiti teksutalne zamijene i još mnogo toga. Skoro sve od ovih naredbi mogu biti stavljene u datoteku za postavke unutar vašeg početnog direktorija. elvis očekuje datoteku .exrc dok vim očekuje datoteku .vimrc. Mnoge od naredbi za postavke koje mogu biti unešene u komandnom modu mogu biti postavljene i u datoteku za postavke. Ovo uključuje informacije o postavkama, tekstualne zamijene, makro-e i drugo. Rasprava o ovim opcijama i razlikama između uređivača teksta je prilično komplicirana tema. Za više informacija provjerite man ili internetnu stranicu vašeg omiljenog vi uređivača teksta. Neki uređivači (kao što je vim) imaju veliki help sustav unutar uređivača koji se može pogledati sa :help naredbom, ili nekom njoj sličnom. Također možete pogledati O'Reilly knjigu Učenje vi uređivača teksta koju su napisali Lamb i Robbins. Velika većina često korištenih programa u Linuxu će učitati tekstovnu datoteku u vi. Na primjer, uređivanje vaše crontab datoteke će pokrenuti vi, Ukoliko ne želite vi i željeli biste neki drugi uređivač teksta umjesto njega, sve što je potrebno učiniti jest postavljanje varijable okruženja VISUAL na uređivač koji vam se sviđa. Za informacije o postavljanju varijabli okruženja pogledajte sekciju sa imenom Varijable okruženja u Poglavlju 8. Ukoliko želite biti sigurni da će ovaj uređivač biti otvoren svaki put kada se ulogirate, dodajte VISUAL u vašu .bash_profile ili .bashrc datoteku. 16.7 vi tipke Ova sekcija je brza referenca za često korištene vi naredbe. Neke od njih su objašnjene u prethodnim dijelovima knjige, dok neke prvi put susrećemo. #######################################################END_OF_TRANSLATION################################################### Table 16-1. Kretanje Operacija Tipka lijevo, dolje, gore, desno h, j, k, l Na kraj linije $ Na početak linije ^ Na kraj datoteke G Na početak datoteke :1 Na liniju 47 :47 Table 16-2. Uređivanje Operacija Tipka Uklanjanje linije dd Uklanjanje pet linija 5dd Zamjena slova r Uklanjanje slova x Uklanjanje deset slova 10x Poništi prethodnu akciju u Spoji trenutnu i sljedeće linije J Zamijeni staro s novim, globalno %s'staro'novo'g Table 16-3. Pretraga Operacija Tipka Traži ?asdf? /asdf Traži unazad ?asdf? ?asdf Ponovi poslijednju pretragu unaprijed / Ponovi poslijednju pretragu unazad ? Ponovi poslijednju pretragu u istom smjeru n Ponovi poslijednju pretragu u suprotnom smjeru N Table 16-4. Spremanje i izlazak Operacija Tipka Izađi :q Izađi bez spremanja :q! Spremi i izađi :wq Spremi, bez izlaženja :w Ponovno otvori trenutnu datoteku :e! Spremi međuspremnik u datoteku asdf :w asdf Otvori datoteku hejaz :e hejaz Učitaj datoteku asdf u međuspremnik :r asdf Učitaj izlaz naredbe ls u međuspremnik :r !ls