2. Vi: esivanem

Ülevaade

Vi oli üldse esimene täisekraaniredaktor. See on üks tähtsamaid programme, millele osutavad nii UNIX® põlgurid kui ka selle kaitsjad: kuigi programmi omandamine ei pruugi olla kõige kergem, on see põhivõtete omandamisel siiski äärmiselt võimas tööriist. Mõne üksiku klahvivajutusega võib Vi kasutaja sõna otseses mõttes mägesid liigutada - ja kui Emacs välja jätta, polegi õigupoolest peaaegu ühtegi tekstiredaktorit, mis midagi samasugust suudaks.

Mandriva Linux pakub Teile tegelikult varianti Vim ehk niinimetatud täiustatud VI'd (VI iMproved), kuid käesolevas peatükis kasutame siiski läbivalt nimetust Vi.

Kui soovite Vi kohta rohkem teada saada, uurige (inglise keeles) sissejuhatust Hands-On Introduction to the Vi Editor või Vim'i kodulehekülge (eesti keeles on võimalik vi'ga põgusalt tutvust teha PingviiniWikis).

2.1. Lisamisrežiim, käsurežiim, ex-režiim...

Vi kasutamiseks käivitame selle käsurealt sarnaselt Emacsiga. Võtame siis taas ette meie kaks näitefaili ja anname korralduse:

$ vi fail1 fail2

Seejärel ilmub Teie ette selline aken:

Joonis 8.4. VIM alustamishetkel

VIM alustamishetkel

Te olete nüüd käsurežiimis esimese avatud faili alguses. Selles režiimis ei ole faili võimalik teksti sisestada. Selleks tuleb Teil lülituda lisamisrežiimi.

Toome mõned kiirkorraldused teksti lisamiseks:

[Märkus]Märkus

Pange tähele, et kiirkorraldused tuleb anda täpselt nii, nagu siin näidatud, sest Vi teeb käskudes vahet suur- ja väiketähtedel. Sestap on näiteks käsud a ja A täiesti erinevad asjad.

  • a ja í: teksti lisamine kursori ette ja järele (A ja I võimaldavad lisada teksti vastavalt aktiivse rea lõppu ja algusesse);

  • o ja O: teksti lisamine aktiivse rea alla ja kohale.

Lisamisrežiimis on ekraani allosas näha sõne ---INSERT---, mis annab Teile teada, millises režiimis parajasti viibite. See on ainus režiim, milles saab teksti sisestada. Käsurežiimi naasmiseks vajutage klahvi Esc.

Lisamisrežiimis saate klahvidega Backspace ja DEL teksti kustutada. Nooleklahvidega saab tekstis liikuda nii käsu- kui lisamisrežiimis. Käsurežiimis on veel mitmeid klahvikombinatsioone, mida tutvustame allpool.

ex-režiimi saab siseneda käsureale : kirjutades. Märk : ilmub ekraani alumisse vasakusse serva ja selle järel asetseb kursor. Vi peab kõike, mida Te nüüd enne klahvile Enter vajutamist kirjutate, ex-käsuks. Kui kustutate käsu ja :, naasete käsurežiimi ning kursor suundub taas oma varasemasse kohta tekstis.

[Vihje]Vihje

ex-režiimis saab kasutada ka lõpetamist: kirjutage käsust esimesed sümbolid ja vajutage selle automaatseks lõpetamiseks klahvi Tab.

Faili tehtud muudatuste salvestamiseks andke käsurežiimis korraldus :w. Kui soovite salvestada puhvri sisu mõnda muusse faili, andke korraldus :w <failinimi>.

2.2. Puhvrite kasutamine

Liikumiseks samas puhvris failide vahel, mille nimed andsite käsureal, andke järgmisele failile liikumiseks korraldus :next ja eelmisele failile liikumiseks :prev. Te võite kasutada ka käsku :e <failinimi>, millega saate liikuda vajalikule failile, kui see on juba avatud, või avada uue faili. Kasutada saab ka lõpetamist.

Nagu Emacsi korral, saab ka vi's lasta ekraanil näidata mitut puhvrit korraga. Selleks kasutage käsku :split.

Puhvri vahetamiseks andke käsk Ctrl-wj alumisse või Ctrl-wk ülemisse puhvrisse liikumiseks. j ja k asemel võib kasutada ka üles ja alla osutavaid nooleklahve. Käsk :close peidab puhvri, käsk :q aga sulgeb.

Tasub silmas pidada, et kui üritate puhvri peita või sulgeda ilma sellesse tehtud muudatusi salvestamata, ei võeta käsku arvesse ja Vi näitab sellist teadet:

No write since last change (use ! to override)

Sellisel juhul tehke nii, nagu öeldud, ja andke käsk :q! või :close!.

2.3. Teksti redigeerimine ja liikumiskäsud

Lisaks redigeerimisrežiimis kasutatavatele klahvidele Backspace ja Del võimaldab Vi kasutada veel tervet rida käske teksti kustutamiseks, kopeerimiseks, asetamiseks ja asendamiseks käsurežiimis. Alltoodud käsud on jagatud õigupoolest kahte lehte: sooritatavad toimingud ja nende mõju. Toimingud võivad olla järgmised:

  • c: asendamine (Change ehk 'muutmine'). Redaktor kustutab soovitud teksti ja naaseb käsu täitmise järel lisamisrežiimi.

  • d: kustutamine (Delete).

  • y: kopeerimine (“Yank” ehk 'paigalttõmbamine'). Sellest räägib lähemalt järgmine alajaotus.

  • .: viimase toimingu kordamine.

Mõju määrab selle, millisele märgigrupile käsk mõjub.

  • h, j, k, l: üks märk vasakule, alla, üles, paremale[20]

  • e, b, w: aktiivse sõna lõppu ja algusesse ning järgmise sõna algusesse.

  • ^, 0, $: aktiivse rea esimese mittetühimärgist märgini, aktiivse rea algusesse ja aktiivse rea lõppu.

  • <x>: märgi <x> järgmisele esinemisele. Näiteks fe viib kursori märgi e järgmisele esinemiskohale.

  • /<sõne>, ?<sõne>: sõne või regulaaravaldise <sõne> järgmisele ja eelmisele esinemisele. Näiteks /suva viib kursori sõna suva järgmisele esinemiskohale.

  • {, }; aktiivse lõigu algusesse ja lõppu.

  • G, H: faili lõppu, ekraani algusesse.

Kõigile sellistele “mõjumärkidele” ehk liikumiskäskudele võib eelneda niinimetatud kordusearv. Näiteks G (“Go” ehk 'mine') korral tähistab see reanumbrit failis. Nii on võimalik moodustada kõikvõimalikke kombinatsioone.

Toome mõned näited:

  • 6b: liigub 6 sõna tagasi.

  • c8fk: kustutab kogu teksti kuni märgi k kaheksanda esinemiseni ja naaseb siis lisamisrežiimi.

  • 91G: liigub faili 91. reale.

  • d3$: kustutab aktiivse rea lõpuni ja veel kaks järgnevat rida.

Kuigi paljud käsud ei tundu esmapilgul väga loogilised ja näivad keerulistena, jäävad nad praktilisel kasutamisel üpris hõlpsasti külge. Aga kahtlemata andis juba seegi pisuke ülevaade aimu, et väljend “paari klahvivajutusega mägesid liigutama” pole tõest sugugi kaugel.

2.4. Lõikamine, kopeerimine, asetamine

Teksti kopeerimiseks kasutab Vi käsku, millega me juba tutvusime: y. Teksti lõikamiseks kasutage lihtsalt käsku d. Teksti salvestamiseks on ette nähtud 27 mälu ehk puhvrit: anonüümne mälu ja 26 mälu, mis on tähistatud inglise tähestiku väiketähtedega.

Anonüümse mälu kasutamiseks andke käsk “nii, nagu see on”. See tähendab, et käsk y12w kopeerib anonüümsesse mällu 12 kursorile järgnevat sõna[21]. Kui soovite selle ala aga lõigata, andke käsk d12w.

26 nimega mälust mõne kasutamiseks lisage käsu ette "<x>, kus <x> määrab ära mälu nime. See tähendab, et eelmises näites toodud 12 sõna kopeerimiseks mällu k tuleb anda käsk "ky12w või "kd12w (kui soovite need sõnad lõigata).

Anonüümse mälu sisu asetamiseks kasutage käsku p või P (Paste ehk 'asetamine') teksti lisamiseks vastavalt kursori järele või ette. Nimega mälu sisu asetamiseks kasutage vastavalt käske "<x>p ja "<x>P (näitkes "dp asetab mälu d sisu kursori järele).

Vaatame seda näite varal:

Joonis 8.5. VIM enne tekstiploki kopeerimist

VIM enne tekstiploki kopeerimist

Kirjapandud toimingu teostamiseks:

  • kopeerige lause esimesed kuus sõna näiteks mällu r: "ry6w[22].

  • liikuge allasuvasse puhvrisse fail2: Ctrl-wj.

  • asetage mälu r sisu kursori ette: "rp.

See annab oodatud tulemuse, mida näitab Joonis 8.6, “VIM pärast tekstiploki kopeerimist”.

Joonis 8.6. VIM pärast tekstiploki kopeerimist

VIM pärast tekstiploki kopeerimist

Teksti otsimine on väga lihtne: käsurežiimis andke lihtsalt käsk / ja selle järel sõne, mida soovite otsida, ning vajutage klahvi Enter. Näiteks käsuga /pidu saab alates kursori asukohast asuda otsima sõnet pidu. Klahvi n vajutamisel saate liikuda sõne järgmisele esinemisele ja kui jõuate faili lõppu, alustatakse otsinguga uuesti selle algusest. Otsimiseks kursorist tahapoole kasutage käsu / asemel käsku ?.

2.5. Vi'st väljumine

Väljumiskäsk on :q (õigupoolest sulgeb see käsk aktiivse puhvri, nagu juba eespool nägime, aga kui tegemist on ainsa avatud puhvriga, pannakse kinni ka Vi). Enamasti ongi tegemist ju üheainsa faili redigeerimisega. Sestap saate väljumiseks kasutada kas käsku

  • :wq või :x muudatuste salvestamiseks ja väljumiseks (veel kiirem on ZZ) või

  • :q! väljumiseks ilma salvestamata.

Pange tähele, et kui Teil on mitu puhvrit, salvestab ja sulgeb käsk :wq ainult aktiivse puhvri.



[20] dl (kustuta üks märk edasi) lühem variant on x; dh (kustuta üks märk tagasi) lühivariant on X ja dd kustutab aktiivse rea.

[21] Aga ainult siis, kui kursor asub esimese sõna alguses!

[22] y6w ehk “Yank 6 words” tähendab otsetõlkes 'tõmba paigast 6 sõna'.