Perusohje vi-editorin käyttöön Aapo Rista 22.9.2000 Sisältö 1 Johdanto 1 2 vi:n komento- ja kirjoitustilat 2 3 vi:n käynnistäminen ja siitä poistuminen 2 4 Liikkuminen tekstissä 3 5 Merkkien lisääminen ja poistaminen 4 6 Tekstin etsiminen ja korvaaminen 5 7 Lähteet ja lisälukemista 6
1 Johdanto Ennen tämän artikkelin kirjoittamista osasin juuri ja juuri muokata tekstiä vi:llä ja poistua editorista. Hallittu poistuminen on kuitenkin vi:n tapauksessa ainakin aloittelijoille tärkeä taito. Siksipä heti näin alussa: Jos haluat poistua vi-editorista tallentamatta mahdollisesti tehtyjä sotkuja, paina Esc-näppäintä päästäksesi vi:n komentotilaan. Komentotilassa kirjoita merkkiyhdistelmä :q!<enter>. Tämän jälkeen sinun pitäisi olla taas Unixin komentokehotteessa tai mistä ikinä vi:n käynnistitkään. ( <Enter> tarkoittaa tässä ja tulevissa esimerkeissä enternäppäimen painallusta eikä lainausmerkkejä ei pidä kirjoittaa. Kannattaa huomioida myös, että joissain tapauksissa yksi Esc-näppäimen painallus ei riitä komentotilaan pääsemiseen.) Jos taas haluat tallentaa tuotoksesi ja lopettaa vi:n, niin siirry tässäkin tapauksessa komentotilaan Esc-näppäimellä ja kirjoita ZZ. Tällöin vi tallentaa tiedoston ennen sulkeutumistaan. Joissain vi-jakeluversioissa on mukana online-help, jonka saa näkyviin kirjoittamalla komentotilassa :help<enter>. Helppi on varsin monipuolinen ja siihen kannattaa ainakin tutustua. Help-ikkunasta pääsee pois kirjoittamalla :q<enter>. Koska olen itsekin varsinainen aloittelija, lähestyn vi:tä aloittelijan näkökulmasta, enkä kirjoita sen kummempia vi:n filosofiasta. Kerron kuitenkin pari itse havaitsemaani seikkaa: vi löytyy lähes kaikista Unix-tyyppisistä järjestelmistä. Usein, vaikka mitään muuta editoria ei olisi käytössä, vi toimii. vi käynnistyy nopeasti. Jos tarve on vain hieman muokata jotain tiedostoa, niin vi käynnistyy yleensä nopeasti ja säästää arvokkaita sekunteja. vi on muita editoreita (kuten emacs) immuunimpi rikkinäisille terminaaliemulaattoreille, näppäinkartoille jne. vi siis saattaa pelastaa päiväsi, kun joudut käyttämään jotain Unix-purkkia jonkin ihmeellisen (epästandardin) pääteyhteyden yli. vi on tehokäyttäjän hyppysissä varsin nopea ja tehokas. Katseltuani aikani erään edistyneemmän Unix-henkilön nakkien vipellystä näppiksellä hänen muokatessa muutamia tiedostoja vi:llä, päätin opetella siitä ainakin perusteet. Samalla syntyi tämä aloittelijan vi-opas. 1
Olen olettanut tätä artikkelia kirjoittaessani, että lukijalla on tiedossa ainakin perusalkeet Unix-järjestelmästä. Toivottavasti tästä alkeisoppaasta koituu joillekin lukijoille edes osa siitä hyödystä, jonka sen kirjoittaminen antoi minulle. Aapo Rista Aapo.Rista@iki.fi 2 vi:n komento- ja kirjoitustilat Johdannossa mainittiin pariin otteeseen vi:n komentotila. vi voikin olla kahdessa eri tilassa: komento- ja kirjoitustilassa (command and insert modes). Komentotilaan pääsee Esc-näppäintä painamalla ja komentotilassa syötetään vi:n komennot. Käyttäjä voi keskeyttää komennon kirjoittamisen Esc-näppäimellä, jolloin vi palaa komentotilaan. Kirjoitustilassa käyttäjä pääsee kirjoittamaan tekstiä aktiiviseen puskuriin (buffer), eli eräänlaiseen editointi-ikkunaan. Puskureita voi olla yhtäaikaa näkyvissä useampia 1 ja lisäksi niitä voi olla myös näkymättömissä. Tässä ei puututa useampien puskureiden saloihin sen tarkemmin, mutta eräs asia on syytä mainita: aktiivista puskuria voi vaihtaa komennolla Ctrl+W Ctrl+W. Taito vaihtaa aktiivinen puskuri on aloittelijallekin hyödyllinen haluttaessa vaikka pitää online-help (jonka siis saa esiin komennolla :help<enter> ) selattavissa yhtäaikaa muokattavan tiedoston kanssa. 3 vi:n käynnistäminen ja siitä poistuminen vi käynnistyy Unixin komentokehotteessa yksinkertaisesti komennolla vi:. Tällöin päästään kirjoittamaan nimeämättömään puskuriin. Kirjoitettu teksti on tallennettava tiedostoon jollain nimellä ja se tapahtuu komentotilassa komennolla :w tiedostonimi<enter>. Komennolla vi tiedostonimi editoriin taas aukeaa nimetty tiedosto. Jos tiedostoa ei ennestään ole, sellainen luodaan tallennettaessa. Joskus tulee tarve poistua vi:stä ilman, että muutokset tallentuvat tiedostoon. Se onnistuu komennolla :q!<enter>. Jos tiedostoa ei ole muutettu tai se on juuri tallennettu, riittää pelkkä :q<enter>. 1 Itse asiassa tämä ei ole vi:n ominaisuus, vaan se löytyy joistain vi-klooneista, kuten vimeditorista. Monissa ympäristöissä vi:n sijaan komennolla vi käynnistyy kuitenkin vim, joten puskuriasia oli syytä mainita 2
Tiedoston välitallennus tapahtuu komennolla :w<enter>. Toisella nimellä tallentaminen onnistuu, kun kirjoittaa edellisen komennon perään välilyönnin ja uuden tiedoston nimen. vi:stä poistumiseen ja tiedoston tallentamiseen voi käyttää myös komentoa ZZ. Tässä vaiheessa on myös syytä mainita, että vi:n komennoissa ISOILLA ja pienillä kirjaimilla on eroa. Esimerkiksi j siirtää kursoria yhden askeleen alaspäin, mutta J taas yhdistää kaksi riviä yhdeksi. 4 Liikkuminen tekstissä Ensin kannattaa kokeilla kursori- eli nuolinäppäimiä. Jos ne eivät vaikka joistain kummallisista pääteasetuksista johtuen toimi oikein, voi askel kerrallaan liikkumiseen käyttää komentotilassa seuraavia näppäimiä: h j k l askel vasemmalle askel alas askel ylös askel oikealle Muita hyödyllisiä liikkumiseen vaikuttavia näppäinkomentoja komentotilassa on mm.: $ rivin loppuun 0 rivin alkuun ^ rivin ensimmäiseen merkkiin w tai W seuraavan sanan alkuun e tai E sanan loppuun b tai B sanan alkuun H M L ng näytön yläriville näytön keskelle näytön alariville riville n (n on kokonaisluku) Ctrl+F näytöllinen alas Ctrl+B näytöllinen ylös Ctrl+D puoli näytöllistä alas Ctrl+U puoli näytöllistä ylös Ctrl+L näytön virkistys :f kertoo kursorin sijainnin Ennenkuin lähtee vaeltamaan tekstissä, voi kursorin sen hetkisen sijainnin panna muistiin. Merkkaaminen onnistuu komennolla m<merkki>, missä <merkki> on 3
joku merkki väliltä a-z, A-Z tai 0-9. Paluu merkattuun kohtaan tapahtuu komennolla <merkki>. (Hipsukka ennen merkkiä on vasemmalle kallistunut ja se löytynee suomalaiselta näppäimistöltä backspace -näppäimen vasemmalta puolelta.) Kokeilemalla saa parhaan tuntuman edellä mainittuihin komentoihin. Lisäksi kannattaa huomata, että kirjoitettaessa ennen komentoa (komentotilassa) kokonaisluku n, suoritetaan seuraava komento n kertaa. Esim. 5k siirtää kursoria viisi riviä ylöspäin. Edellä mainittu toimii useimpien komentojen kanssa. 5 Merkkien lisääminen ja poistaminen Kirjoitustilassa tekstin lisääminen tapahtuu normaalisti näppäimistöltä. Kirjoitustilaan pääsee komentotilasta mm. seuraavilla komennoilla: a A i I o O lisää tekstiä kursorin oikealle puolelle lisää tekstiä rivin loppuun lisää tekstiä kursorin kohdalle lisää tekstiä rivin alkuun tekee alapuolelle tyhjän rivin ja lisää tekstiä rivin alkuun tekee kohdalle tyhjän rivin ja lisää tekstiä rivin alkuun Merkkejä voi poistaa ja korvata ainakin seuraavilla komennoilla: x X r<merkki> R poistaa kursorin kohdalla olevan merkin poistaa kursoria edeltävän merkin korvaa kursorin kohdalla olevan merkin vi siirtyy korvaustilaan Monipuolisemmin merkkien poisto onnistuu komennolla d, jonka käytöstä tässä muutamia esimerkkejä: d^ poistaa merkit kursorin vasemmalta puolelta rivin alkuun d$ tai D poistaa merkit kursorista rivin loppuun dd poistaa koko rivin dw poistaa merkit kursorista seuraavan sanan alkuun de poistaa merkit kursorista sanan loppuun 5de poistaa 5 seuraavaa sanaa 5dd poistaa viisi riviä jne... d itse asiassa leikkaa (cut) poistetun tekstin puskuriin. Tekstin voi liimata (paste) komennoilla p ja P. Viimeisimmän muutoksen voi peruuttaa (undo) komennolla u ja kaikki riville tehdyt muutokset komennolla U. 4
p P 4P u U lisää poistetun tekstin kursorin jälkeen lisää poistetun tekstin kursorin kohdalle lisää poistetun tekstin kursorin kohdalle 4 kertaa peruuta viimeisin muutos peruuta kaikki äsken riville tehdyt muutokset Joskus tulee tarve kopioida tekstiä toiseen paikkaan. Tekstiä voi kopioida puskuriin riveittäin komennolla yy. yy kopioi kursorin osoittaman rivin, 3yy (tai 3Y ) taas kolme riviä. Jos ei halua laskea rivejä, voi kopioitavan alueen alun merkata komennolla m<merkki> ja kopioida alueen sitten puskuriin komennolla y <merkki>. Kopioidun tekstin liittäminen tapahtuu edellä mainituilla p ja P komennoilla. 6 Tekstin etsiminen ja korvaaminen Etsi-toiminnon peruskäyttö on vi:ssä varsin yksinkertaista 2 : vinoviivan perään kirjoitetaan etsittävä merkkijono ja painetaan enter: /mjono<enter> siirtää kursorin seuraavaan merkkijonon mjono esiintymään tekstissä.?mjono taas siirtää kursorin edelliseen esiintymään. On huomattava, että jotkut vi:n käyttämät erikoismerkit on suojattava etsittävissä merkkijonoissa kenoviivalla. Näitä ovat mm.: ^*$[<> ja. Etsintää voi jatkaa samaan suuntaan komennolla n ja vastakkaiseen suuntaan komennolla N. Yhteenveto: /mjono etsii seuraavan esiintymän merkkijonosta mjono?mjono etsii edellisen esiintymän merkkijonosta mjono n toistaa edellisen etsinnän samaan suuntaan N toistaa edellisen etsinnän vastakkaiseen suuntaan Etsi-korvaa-toiminnon peruskäyttö on melkein yhtä yksinkertaista 3 : jos halutaan korvata esimerkiksi kaikki tekstissä esiintyvät merkkijonot foo merkkijonolla puppu, komento kuuluu: :1,$s/foo/puppu/g. Edellisessä 1,$ tarkoittaa rivejä ensimmäisestä viimeiseen, s on komento, vinoviiva / erotinmerkki ja g kohdistaa toimenpiteen kaikkiin rivin esiintymiin. (Muuten ainoastaan rivin ensimmäinen esiintymä korvattaisiin uudella). 2 Etsi-toiminto on oikeasti kuitenkin varsin monipuolinen ja lisätietoa siitä kannattaa etsiä vi:n dokumentaatiosta tai valmiiksi pureskeltuna erilaisista oppaista Internetistä. 3 Etsi-korvaa-toiminto on myöskin erittäin monipuolinen ja lisätietoa siitä kannattaa etsiä vi:n dokumentaatiosta ja etenkin Internetistä. 5
Edellämainituissa komennoissa voi käyttää ns. säännöllisiä lausekkeita (regular expression), jotka ovat osaavissa käsissä erittäin tehokas väline merkkijonojen käsittelyyn. Niihin kannattaa tutustua. 7 Lähteet ja lisälukemista Tässä artikkelissa on nyt käyty sellaiset vi:n peruskomennot läpi, joilla voi aloittaa melko järkevästi vi:n käytön. vi on kuitenkin varsin monipuolinen editori ja paljon käyttökelpoisia ominaisuuksia on jäänyt mainitsematta. Toisaalta, kun peruskäyttö on hallussa, niin vähitellen voi opetella niitä todellisen tehokäyttäjän vi-toimintoja. Etenkin Internet on pullollaan eritasoisia vi-oppaita. Google löysi 16.09.2000 hakusanoilla vi tutorial noin 64800 osumaa. Suomenkielistä vi-materiaalia tuntuu löytyvän vähän heikosti, tässä kuitenkin pari melko linkitettyä URLia: http://www.hit.fi/%7elehtonen/unix/unix26.htm http://www.cs.joensuu.fi/pages/amanuenssi/computing_facilities CS/vi/vi.html /Ohjelmat- Edellisestä löytyy aivan peruskomennot ja jälkimmäinen on laajempi lista vi:n komennoista. Englanninkielisistä tutoriaaleista kannattanee mainita ainakin http://www.eng.hawaii.edu/tutor/vi.html http://www.cis.udel.edu/%7etotten/vi/ http://www.networkcomputing.com/unixworld/tutorial/009/009.html http://www.thomer.com/thomer/vi/vi.html Lisäksi Unixin komentokehotteessa man vi ja vi:n komentotilassa :help auttavat tarvittaessa. 6