Vi

vi (ex-tekstinmuokkauskielen komennosta visual) on Unix-käyttöjärjestelmissä suosittu tekstipohjaisella näyttöpäätteellä tai pääte-emulaattorilla käytettäväksi tarkoitettu tekstieditorin tapaan toimiva visualisointityökalu ex-tekstinmuokkauskielelle. Ohjelman ensimmäisen version kehitti Bill Joy vuonna 1976 BSD:lle. Joy kehitti aluksi ex-tekstinmuokkauskielen ed:in pohjalta ja vi:n tämän käyttöliittymäksi.

Nykyisin on käytössä useita vi-toteutuksia, joista yleisimpiä ovat nvi ("new vi") ja vim ("vi improved"). Vi on osaavissa käsissä erittäin tehokas tekstieditori. Vi:n ja Emacsin välillä on käyty nk. Editorisotaa.

vi:n toiminta perustuu rivieditorien ed ja ex tavoin toimintatiloihin, joita on kolme: kirjoitustila, muokkaustila ja komentotila. Myöhemmissä vi-toteutuksissa (esimerkiksi vim) mukaan on lisätty myös tekstialueiden valintaan ja käsittelyyn tarkoitettu valintatila, eli "visuaalinen" tila. Tilojen välillä siirtyminen tuottaa jonkin verran päänvaivaa aloitteleville vi-käyttäjille. Tilojen hyvä ominaisuus on, että vi-käyttäjän ei tarvitse siirtää käsiään koskaan pois kirjoitusnäppäimiltä
muokatakseen tekstiä. Perusketju tekstin syöttämiseen vi -editorilla etenee aina seuraavasti:

 Käynnistymisen jälkeen olet aina muokkaustilassa, jossa voit muokata tekstiä näppäinkomentoja käyttämällä
 Kirjoitustilaan siirrytään aina joillakin näppäinkomennolla: i,I,a,A,o tai O
 Muokkaustilaan palataan aina <esc> -näppäimellä. 
 : näppäimellä käynnistetään ex -tyylinen komentotila, jossa hallitaan tiedostoja ja puskureita kokonaisuuksina
Valintatilaan, eli visuaaliseen tilaan siirrytään komennolla v, V tai Ctrl+V.

Perus-vi:n etuna on se, että se toimii kaikissa Posix-standardia toteuttavissa järjestelmissä.

Peruskomennot 
 <esc> : Palaa muokkaustilaan kaikista ti­loista paitsi ex-tilasta
  :wq : Siirtyy komentotilaan ja suorittaa talletta­misen ja poistu­misen vi:stä
  :q! : Siirtyy komentotilaan ja suorittaa poistumi­sen tallentamalla vaikka olisit tehnyt muutoksia
  i : Siirtyy lisäystilaan kursorin koh­dalle
  a : Siirrytään lisäystilaan kursorin kohdalla olevan merkin perään
  I  (iso i): Siirtyy lisäystilaan rivin alkuun
  A : Siirtyy lisäystilaan rivin loppuun
  o : Avataan uusi rivi lisäystilaan ny­kyisen alapuolelle
  O : Avataan uusi rivi lisäystilaan ny­kyisen yläpuolelle
  k : Rivi ylöspäin
  j : Rivi alaspäin
  l : Merkki oikealle
  h :  Merkki vasem­malle
  H : Siirtyy näytössä olevan ensimmäisen rivin kohdalle
  M : Siirtyy näytössä olevan keskimmäisen rivin kohdalle
  L : Siirtyy näytössä olevan viimeisen rivin kohdalle
  ^y : Vierittää näyttöä ylöspäin (kursori pysyy paikallaan)
  ^e : Vierittää näyttöä alaspäin (kursori pysyy paikallaan)
  x : Poista merkki kur­sorin alta
  X : Poista merkki kursorin vasemmalta puolelta
  dd : Poista rivi kursorin kohdalta (menee kopiopuskuriin)
  G : Mene tiedoston loppuun
  :1 : Mene riville 1
  1G : Mene riville 1
  yy : Kopioi rivi (yank) kopiopuskuriin
  p : Palauta kopiopuskuri tämän ri­vin alapuolelle
  P : Palauta kopiopuskuri tämän ri­vin yläpuolelle
  :r tiedosto.txt : Lue tiedosto.txt kur­sorin kohdal­le ja palaa komentoti­laan
  :w apu.txt : Talleta puskuri ni­melle apu.txt
  /apudapu : Hae merkkijonoa apudapu eteenpäin
  ?apudapu : Hae merkkijonoa apudapu taak­sepäin
  . : Toista edellinen komentotilan ko­mento
  :1,$s/apudapu/hapupapu/gc : Korvaa apudapu sanalla hapupapu kaikkialla (g) ja kysy ennen kor­vausta varmistus (c)
  ma : Merkataan komentotilassa rivi sisäisesti riviksi A ja kohdistimen paikka merkiksi A
  mb : Merkataan komentotilassa rivi sisäisesti riviksi B ja kohdistimen paikka merkiksi B
  'a : Siirry A merkin riville
  'b : Siirry B merkin riville
  `a : Siirry A merkin kohdalle
  `b : Siirry B merkin kohdalle
  :'a,'by : Kopioidaan rivit A ja B merkkien väliltä, rivit A ja B mukaan ottaen, kopiopuskuriin
  ra : Korvaa kursorin alla oleva merkki merkillä a
  :! <komento>: Suorittaa vi:tä ajavassa komentotulkissa komennon
  !! <komento>: Suorittaa vi:tä ajavassa komentotulkissa komennon ja korvaa komennon tulosteella kursorin kohdalla olevan rivin
 Q : Siirtyy muokkaustilasta ex-tilaan, takaisin muokkaustilaan pääsee komennolla vi

Lähteet 

Tekstieditorit
BSD-ohjelmat