Vim

**Vim** (; en forkortelse for **Vi IMproved**) er en klone av Bill Joys teksteditor vi. Den ble skrevet av Bram Moolenaar basert på kildekode for en portering av editoren Stevie for Amiga, og første gang lansert 2. november 1991. Vim kan enten brukes via kommandolinjen eller som et selvstendig program med et grafisk brukergrensesnitt (og kalles da **gVim**). Vim er fri og åpen programvare og lanseres under en lisens som inkluderer enkelte veldelighets-klausuler, som åpner for å donere penger til barn i Uganda. Lisensen er kompatibel med GNU General Public License.

Selv om Vim opprinnelig ble lansert for Amiga, har den utviklet seg til å bli multiplattform-programvare. I 2006 ble Vim kåret til den mest populære teksteditoren av lesere av *[[Linux Journal]]*.

## Brukergrensesnitt

Vim baserer seg på kommandoer skrevet inn i et tekstbasert brukergrensesnitt, i motsetning til et grensesnitt med menyer og ikoner. Dette innebærer at all redigering gjøres via tasturet, uten bruk av mus. For at dette skal kunne gjøres effektivt er Vim laget som en modal teksteditor, som vil si at man til enhver tid befinner seg i en viss modus. 

Den grafiske versjonen av Vim (gVim) legger til menyer og andre grafiske elementer for de mest brukte funksjonene, som kan lette behovet for å huske mange forskjellige kommandoer. Man står likevel fritt til å utelukkende bruke kommandoer dersom man ønsker det.

Vim har en egen innebygd brukermanual for nybegynnere, som kan kjøres ved å skrive `vimtutor` i kommandolinja. Denne lærer brukeren grunnleggende ferdigheter i Vim, som hvordan bevege seg rundt i et dokument, redigering av tekst og lignende. Det finnes også en mer omfattende manual som enten kan leses innenfor Vim eller på nettet.

Den største forskjellen mellom Vim og editorer som Emacs er at Vim benytter seg av forskjellige moduser i normal bruk, dette gjør at editeringskommandoer ofte bare ugjør en bokstav, i motsetning til Emacs hvor kommandoer typisk gjøres Med en kombinasjon av f.eks Ctrl og en bokstav. Vim sine moduser kan føles uvant for nye brukere, med konstant hopping mellom normal og innsettingsmodus. Det kan ta litt til å bli effektiv med Vim, men en dreven bruker vil sjelden ha behov for å løfte fingrene vekk fra "hjemme-rekken" på tastaturet, og Vim er derfor noe mer vennlig mot fingrene. Vim lar deg også i større grad også kombinere kommandoer på en logisk måte noe som gjør Vim spesielt kraftfull i Normal-modus. 

### Moduser
Det finnes seks grunnleggende moduser i Vim, hver med sin egen funksjon. I tillegg til disse finnes det ytterligere seks moduser, som er varianter av de grunnleggende modusene. De seks grunnleggende modusene er:

* **Normal** - Modusen man vanligvis befinner seg, og brukes til å bevege seg rundt i teksten og skrive vanlige tekstredigeringskommandoer. Man kommer automatisk til denne modusen ved å trykke Escape (`<Esc>`) mens man befinner seg i en annen modus.
* **Innsetting** - Brukes til innsetting av tekst. For å komme i denne modusen taster man `i`, og man kan da begynne å skrive inn tekst.
* **Visuell** - Brukes til markering av tekst, og startes ved å taste `v`. Selv om modusen er ment til å markere tekst, kan mange av oppgavene man normalt sett forbinder med tekstmarkering (kopiering, klipping, liming etc.) gjøres via normalmodusen, noe som ofte er enklere.
* **Kommando** - Brukes til å skrive inn kommandoer som ofte ikke direkte modifiserer tekst, og startes ved å taste enten `:`, `?`, `/` eller `!` (avhengig av kommandoen man vil utføre) og deretter enter. Et vanlig eksempel er `:w`, som lagrer dokumentet, eller `:q!`, som går ut av dokumentet uten å lagre.
* **Valg** - Lignende visuell, men med en oppførsel mer lik tekstmarkering i Microsoft Windows.
* **Ex-modus** - Lignende kommando, men brukes for utføring av mange kommandoer om gangen, ettersom man ikke går ut av modusen etter man trykker enter (for å utføre en kommando).

## Tilpasning
Vim har støtte for omfattende brukertilpasning. Ved å bruke den innebygde funksjonaliteten for makroer, kan man ta opp sekvenser med intruksjoner og kommandoer, og deretter spille av disse igjen. Dette kan forenkle repetivt arbeid, ettersom man kun trenger å ta opp en makro én gang, og kan deretter spille den av et vilkårlig antall ganger. Dersom makro-funksjonaliteten ikke strekker til, har man også anledning til å bruke Vim script.

Det finnes mange programtillegg skrevet for Vim (som oftest i Vim script), som kan gi ytterligere funksjonalitet. Slike tillegg kan for eksempel legge til muligheten for filutforskning eller automatisk sjekking av syntaksfeil, men også endre utseendet i form av ulike farger.

Man kan også manuelt endre oppførselen til Vim, som for eksempel endre hva ulike taster gjør, sette at tabulator automatisk skal gjøres om til mellomrom og lignende. Slike endringer gjøres i en egen tekstfil kalt .vimrc, og Vim kjører automatisk instruksjonene som ligger i denne fila når det starter.

## Vim script
**Vim script** (også kalt vimscript, viml eller VimL) er Vims innebygde skriptspråk. Vim script kan brukes til å skrive egne funksjoner man kan kalle mens man kjører Vim, eller programtillegg for å tilpasse Vim slik man ønsker. Skript skrives hovedsakelig i en imperativ programmeringsstil, selv om man også har mulighet for å bruke en mer funksjonell programmeringsstil.

Skript skrevet i Vim script skiller seg fra makroer, som også er en innebygd funksjonalitet i Vim. Makroer kan brukes til å ta opp en sekvens med instruksjoner og kommandoer, og deretter spille av disse igjen. Selv om skript kan brukes til det samme, har skript også mulighet for å bruke variabler og datatyper, samt mer avanserte kontrollstrukturer. På grunn av dette kan man gjøre mer avanserte og omfattende ting med Vim script enn med makroer.

Tekstfiler skrevet i Vim script lagres med filetternavnet .vim. De fleste programtillegg man kan bruke i Vim er også skrevet i Vim script.

### Kodeeksempel
Nedenfor er et kodeeksempel skrevet i Vim script, som demonstrerer en enkel while-løkke. Tekst etter et anførselstegn (") regnes som kommentarer.


```vim
let i = 1            " Sett variabel i til å ha verdien 1
while i < 5          " Fortsett så lenge i er mindre enn 5
  echo "count is " i " Skriv ut verdien til i
  let i += 1         " Øk i med 1
endwhile             " Markerer slutten på while-løkka
```


## Referanser


## Eksterne lenker
* 
*