D3. Vim
1. Vad är Vim?
Vim är en mycket populär textredigerare som är designad för att köras i skalfönstret. Därför styrs Vim endast via tangentbordskommandon från användaren. Detta gör att Vim till en början upplevs som överväldigande och krångligt men med tiden kommer du att kunna jobba snabbare och mer effektivt i Vim än med grafiska textredigerare. Det finns även en version av Vim med GUI (Graphical User Interface) men det som är förinstallerat på LiU:s datorer är utan.
Eftersom Vims användargränssnitt består helt av tangentbordskommandon får användaren väldigt begränsat med information om sina valmöjligheter i programmet. Vim visar ingenting om inte användaren själv ber om det via kommandon, vilket gör Vim till ett program som är rätt svårt att komma igång med för nybörjare.
2. Starta och avsluta Vim
Du startar Vim genom att helt enkelt öppna skalfönstret och skriva in vim
vid prompten och trycka Enter. Vim kan också startas via skrivbordsmiljön. I Xfce finns Vim i undermenyn Accessories. När du först startar Vim ser det ut så här i terminalfönstret:
Du kan även skriva in vim filnamn
för att öppna en fil i Vim direkt. Om du skriver in ett filnamn som inte finns sen tidigare skapas en ny fil med det namnet av Vim. Du kan också välja att skicka med en flagga när du startar Vim. Genom att t.ex skriva vim -R filnamn
startas vim i skrivskyddat (read-only) läge. Man kan även skicka med flera flaggor efter varandra om man vill. Den generella syntaxen för startkommandot av Vim är:
vim [ flaggor | filnamn ]
I tabellen nedan finns några exempel på hur du kan starta vim. För en komplett lista se följande länk eller skriv vim -h
i skalfönstret.
Kommando | Beskrivning |
---|---|
vim rapport.txt |
Startar Vim i skalfönstret och öppnar filen rapport.txt. |
vim -R rapport.txt |
Startar Vim och öppnar filen rapport.txt i skrivskyddat läge. |
vim --version |
Visar vilken version Vim kör och vilka funktioner som är förinstallerade. |
vim -Z |
Startar Vim i begränsat läge. Alla kommandon som använder ett externt skal är inaktiverade. |
För att sedan avsluta Vim skriver man :q
och trycker Enter. Har man gjort ändringar i filen kommer det här kommandot att klaga på att ändringarna inte sparats. Om man vill stänga ner utan att spara ändringar kan man istället skriva :q!
. För att spara sina ändringar och avsluta kan man skriva :wq
.
Kommando | Beskrivning |
---|---|
:q |
Avslutar Vim om inga ändringar gjorts. |
:q! |
Avslutar Vim utan att spara ändringar. |
:w |
Sparar alla ändringar i filen. |
:wq |
Sparar alla ändringar i filen och avslutar Vim. |
Övning
Skapa och öppna en ny fil som heter vim-övning.txt
i Vim. Spara sedan filen och avsluta Vim.
3. Lägen i Vim
I Vim arbetar man i tre olika lägen; Normal Mode (eller Command mode), Insert mode och Visual mode. Normal mode är det läget du befinner dig i när du startar Vim. I det här läget lyssnar Vim på tangentbordskommandon från användaren. Insert mode är läget där du kan redigera text fritt. I Visual mode kan du markera text och redigera den med hjälp av kommandon, t.ex kopiera text.
Insert mode
För att gå in i Insert mode, tryck på tangenten i
. Du kan se att du är i Insert mode genom att det står -- INSERT -- längst ner i fönstret. Nu kan du skriva och redigera text fritt.
Om du sen vill spara din text som du skrivit ned måste du först gå tillbaka till Normal mode. För att gå ur Insert mode och tillbaka till Normal mode trycker du på tangenten Esc
.
Övning
Öppna filen vim-övning.txt
som du skapade i förra övningen och skriv några rader text. Spara sedan dina ändringar och avsluta Vim.
Normal mode
I Normal mode lyssnar Vim efter instruktioner från dig. Det är upp till dig att ge programmet kommandon. Du behöver säga till textredigeraren vad som ska göras. Vi kommer inte kunna gå igenom alla kommandon i Vim, men vi går igenom tillräckligt för att du ska kunna börja använda det.
För att flytta markören ett steg används följande tangenter:
h
- vänsterj
- nedåtk
- uppåtl
- höger
|
k
- h l - : Visuell representation.
j
|
Testa att leka runt lite med markören i en textfil tills du känner dig bekväm med tangenterna. Här kommer ytterligare ett par kommandon:
0
- Flyttar markören till början av raden$
- Flyttar markören till slutet av raden
Man kan även flytta markören ord för ord genom följande kommandon:
w
- Flyttar markören till början på nästa ord.b
- Flyttar markören till föregående ord.
Visual mode
I Visual mode kan man markera text för att utföra kommandon på den markerade texten, t.ex. kopiera eller radera. För att gå in i Visual mode trycker man på v
. Man vet att man är i rätt läge om det står -- VISUAL -- längst ner i fönstret.
Härifrån kan man markera text genom att flytta markören. Sedan kan man antingen klippa ut den markerade texten med d
eller kopiera med y
.
Om man vill markera rad för rad kan man skriva V
istället för v
från Normal mode, och om man vill markera blockvis kan man använda ctrl+v
. Nedan följer några användbara kommandon när man vill markera och redigera text.
Kommando | Beskrivning |
---|---|
v |
Starta visuellt läge. Här kan man markera text och sedan utföra ett kommando på den markerade texten. |
V |
Starta visuellt läge (radvis). |
Ctrl+v |
Starta visuellt block läge. |
o |
Flytta markören till andra sidan av markerade området. |
O |
Flytta markören till andra hörnet av det markerade blocket. |
aw |
Markera ett ord. |
y |
Kopiera (yank) den markerade texten. |
d |
Klipp ut (delete) den markerade texten. |
Esc |
Avsluta Visual mode och återgå till Normal mode. |
4. Funktioner i Vim
Klipp och klistra i Normal mode
I Vim är kommandot för att radera text och klippa ut text detsamma. Och visst, man skulle kunna radera text på vanligt vis i Insert mode men ni kommer märka att det går mycket snabbare och smidigare att göra det med kommandon i Normal mode istället.
För att klippa ut, eller radera, ett tecken använder man tangenten x
och för att radera ett tecken innan markören trycker man X
.
Vill man kopiera en hel rad kan man skriva yy
, och om man vill klippa ut en hel rad använder man dd
.
För att klistra in använder man tangenten p
(put).
Kombinera operator med rörelse
Det som är så kraftfullt med Vims kommandosystem är att de går att kombinera och sätta ihop för att bygga väldigt starka kommandon. Istället för att lägga alla kommandon på minnet är det bättre att lära sig hur de är uppbyggda och hur de fungerar.
Man kan säga att det finns två olika typer av kommandon; operator och rörelse (eng. motion).
operator
är en funktion man vill utföra. Exempel på operator är:
d
- Radera/klipp ut (delete)y
- Kopiera (yank)c
- Ändra (change)p
- Klistra in (put)r
- Ersätt (replace)x
- Radera/klipp ut ett tecken
rörelse
(eng. motion) är kommandon där man flyttar markören. Exempel:
h, j, k, l
- Flyttar markören vänster, nedåt, uppåt, höger.w
- Flyttar markören till början av nästa ord.b
- Flyttar markören till föregående ord.e
- Flyttar markören till slutet av aktuellt ord.$
- Flyttar markören till slutet av raden.)
- Flyttar markören till början av nästa mening.(
- Flyttar markören till början av aktuel mening.
I Vim kan man kombinera operator och rörelse med en siffra för att bygga mer effektiva kommandon. Man kan kombinera de flesta kommandon på följande sätt:
[operator][siffra][rörelse]
[siffra][operator]
[siffra][rörelse]
siffra
är bara en multiplikator som anger hur många gånger kommandot ska upprepas.
Ett exempel är d3w
. d
är kommandot för att klippa ut eller radera och w
är kommandot för att flytta markören till början av nästa ord. d3w
betyder alltså "Klipp ut(d
) de 3
nästa orden(w
) som står efter markören."
Ett annat exempel kan vara y5$
som betyder: "Kopiera(y
) de 5
nästa raderna($
) från markörens position."
Man kan tänka att siffra
kombinerat med rörelse
skapar ett område som markören rör sig över och operator
utför sin funktion på det området.
Nedan följer några ytterligare exempel:
Kommando | Förklaring |
---|---|
d2h |
Klipp ut 2 tecken vänster om markören. |
y3j |
Kopiera 3 rader ovanför markören och aktuell rad. |
d3) |
Klipp ut 3 meningar från markören. |
10x |
Klipp ut 10 tecken efter markören. |
3dd |
Klipp ut 3 rader inklusive radbrytning. |
2yy |
Kopiera 2 rader inklusive radbrytning. |
5j |
Flyttar markören 5 steg nedåt. |
10p |
Klistra in 10 gånger. |
Övning
Öppna filen vim-övning.txt
från tidigare övningar och lek runt med kombinerade kommandon till du känner dig säker på hur de fungerar.
Sök och ersätt
Likt många andra textredigerare kan man söka efter textsträngar och ersätta med en annan textsträng. Tabellen nedan är ganska självförklarlig. Använd /g
för global sökning och /c
för att fråga om tillåtelse för varje matchning. Se exempel nedan:
Kortkommando | Förklaring |
---|---|
/i |
Söker efter mönstret i och flyttar markören till nästa matchning från markören. |
?i |
Söker baklänges efter mönstret i och flyttar markören till nästa matchning innan markören. |
n |
Gå till nästa matchning av mönstret. |
N |
Gå till föregående matchning av mönstret. |
* |
Gå till nästa förekomst av ordet under markören. |
# |
Gå till föregående förekomst av ordet under markören. |
:s/foo/bar |
Sök efter den första förekomsten av foo och ersätt med bar på den aktuella raden |
:s/foo/bar/g |
Sök efter varje förekomst av foo och ersätt med bar på den aktuella raden. |
:%s/foo/bar/g |
Sök efter varje förekomst av foo och ersätt med bar på alla rader. |
:%s/foo/bar/gc |
Sök efter varje förekomst av foo och ersätt med bar på alla rader men fråga om tillåtelse för varje. |
:a,bs/foo/bar/g |
Ersätt varje foo med bar på alla rader från rad a till b. |
När du använder c
-argumentet kommer Vim ge följande output för varje matchning: replace with foobar (y,n,a,q,l,^E,^Y)?
som står för:
- yes - ersätt.
- no - skippa.
- all - ersätt alla kvarvarande matchningar.
- quit - avbryt.
- last - ersätt aktuell matchning och sedan avbryt.
- ^E - Håll ned
ctrl
och tryckE
för att scrolla uppåt. - ^Y - Håll ned
ctrl
och tryckY
för att scrolla nedåt.
Övning
Skriv lite text i vim-övning.txt
och testa sök-och-ersätt-funktionerna ovan tills du förstår hur de fungerar.
Buffertar och fönster
I Vim, likt Emacs, kan man jobba med flera filer samtidigt i olika fönster och buffertar. Ett fönster är en grafisk ruta i Vim i vilken man kan visa olika buffertar. En buffert är ett logiskt utrymme där en fil kan visas och redigeras. När Vim först startas består den av ett fönster med en buffert i. Fönstret kan delas in i två eller flera delar och i varje del kan man ha olika buffertar och i varje buffert kan man visa en fil. Nedan följer en tabell med kommandon för buffertar och fönster i Vim.
Kommando | Beskrivning |
---|---|
:e filnamn |
Öppnar en fil i en ny buffert och skapar filen om den inte finns. |
:bnext eller :bn |
Gå till nästa buffert. |
:bprev eller :bp |
Gå till föregående buffert. |
:bd |
Radera en buffert (stäng ner filen). |
:ls |
Lista alla öppna buffertar. |
:sp filnamn |
Öppna en fil i en ny buffer och dela fönstret horisontellt. |
:vsp filnamn |
Öppna en fil i en ny buffer och dela fönstret vertikalt. |
ctrl+w - s |
Dela fönstret horisontellt. |
ctrl+w - w |
Byt fönster. |
ctrl+w - q |
Stäng ner ett fönster. |
ctrl+w - v |
Dela fönstret vertikalt. |
ctrl+w - h |
Flytta markören till fönstret till vänster. |
ctrl+w - l |
Flytta markören till fönstret till höger. |
ctrl+w - j |
Flytta markören till fönstret nedan. |
ctrl+w - k |
Flytta markören till fönstret ovan. |
Övning
Lek runt lite med kommandona ovan tills du känner dig bekväm med hur man skapar buffertar, delar fönster och redigerar i flera filer samtidigt.
5. Vimtutorial
Som sista tips på den här genomgången av Vim kan vi rekommendera Vims inbyggda handledning. Det är en interaktiv snabbkurs som går igenom det mesta man behöver veta för att använda Vim. För att starta handledningen skriv vimtutor
i skalfönstret. Det tar ungefär 25-30 minuter att gå igenom allt men ta din tid så att du verkligen förstår allt.
Övning
Slutför Vims interaktiva handledning innan du gör diagnosen.
Extramaterial
Om du vill fördjupa dig mer i konfiguration av Vim, kolla i vårt extramaterial.
Sammanfattning
Vi har satt ihop en lathund i PDF-format med en lista över vanliga kommandon och funktioner i Vim.
- Vim är en textredigerare som är designad för att kunna köras i skalet. Därför styrs Vim enbart av kommandon från tangentbordet.
- Startkommandot för Vim har följande syntax:
vim
[
flaggor
|
filnamn
]
. - I Vim finns tre olika lägen; Normal mode, Insert mode och Visual mode.
- Man kan kombinera kommandon med varandra för att skapa mer effektiva kommandon på följande sätt.
[operator][siffra][rörelse]
[siffra][operator]
[siffra][rörelse]
- Ett fönster är en grafisk ruta i Vim i vilken man kan visa olika buffertar.
- En buffert är ett logiskt utrymme där en fil kan visas och redigeras.
Diagnos
När du har läst detta kapitel och övat lite på att använda Vim är det dags att göra diagnos D3.
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-06-30