Göm menyn

Vim

I det här avsnittet går vi igenom textredigeraren Vim.

Viktigt Det finns en lathund som PDF med en lista över vanliga kommandon och funktioner i Vim.

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.


Så här kan Vim se ut när du kör det i skalfönstret på LiU:s Linux-system

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 svårt att komma igång med för nybörjare.

Starta och avsluta vim

Man 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:


Vim vid uppstart. Här syns bland annat vilken version som körs.

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. Om filen inte finns skapas en ny med namnet 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(quit) Vim (om inga ändringar gjorts).
:q! Avslutar Vim utan att spara ändringar.
:w Sparar(write) 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.

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änster
  • j - nedåt
  • k - uppåt
  • l - 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.

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, en karaktär använder man tangenten x och för att radera en karaktär 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 en karaktär

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:

  1. [operator][siffra][rörelse]
  2. [siffra][operator]
  3. [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 karaktärer 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 karaktärer 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:

  1. yes - ersätt.
  2. no - skippa.
  3. all - ersätt alla kvarvarande matchningar.
  4. quit - avbryt.
  5. last - ersätt aktuell matchning och sedan avbryt.
  6. ^E - Håll ned ctrloch tryck Eför att scrolla uppåt.
  7. ^Y - Håll ned ctrloch tryck Y 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.

Konfigurera vim

Vim har en uppsjö av inställningar för att skapa en personlig konfiguration av programmet. Testa t.ex att skriva in kommandot :set number i Vim och se vad som händer. Alla inställningar man gör på det här sättet försvinner varje gång man startar om Vim.

Vill man att inställningarna man gör ska vara kvar även när man startar om Vim kan man lägga dem i konfigurationsfilen .vimrc som är en punktfil. Den här filen finns inte på din dator från början utan du får själv skapa den och lägga den i din hemkatalog(~).

Testa att öppna .vimrc i Vim och lägg till följande rad:

set number

Spara filen och starta sedan om Vim. Du bör nu ha radnummer varje gång du startar Vim. Det finns väldigt många inställningar man kan göra i Vim så vi går bara igenom några stycken som är väldigt användbara. Vill ni grotta ner er ytterligare finns det många bra guider på internet i hur man konfigurerar Vim. För en komplett lista på alla inställningar skriv :options i Vim.

Nedan följer några förslag på inställningar som gör livet lite lättare när man använder Vim.

Blandat
set number Visa radnummer.
set cmdheight= Bestäm höjden på kommandolinjen.
set ruler Visar aktuell position på markören i statusraden.
set ignorecase Stäng av skiftlägeskänslig när man söker.
set inchsearch Söker medan man skriver.
Färgkodning
syntax enable Syntaxmarkering.
colorschemeditt_färgschema Ändra färgschema.
set background= dark: Vim kommer använda färger som ser bra ut på mörk bakgrund.
light: Vim kommer använda färger som ser bra ut på ljus bakgrund.
set hlsearch Markera matchningar när man söker efter en textsträng.
set showmatch Markerar en brackets motsvarande.
Text, tab och indentering
set wrap Se till att all text visas på skärmen.
set ai Autoindentering.
set si Smart indentering.
set expandtab Använd spaces istället för tabs.
set smarttab Använder antal blanksteg enligt shiftwidth.
set shiftwidth=4
set tabstop=4
1 tab = 4 spaces

Ladda in eget färgschema

Här är en lista på förinstallerade färgscheman: * default * blue * darkblue * delek * desert * elflord * evening * industry * koehler
* morning
* murphy
* pablo
* peachpuff
* ron
* shine
* slate
* torte
* zellner

Om du vill kan du skapa ett eget färgschema eller ladda ner en färdig från internet (sökord: Popular colorschemes in Vim). Ett färgschema har filändelsen .vim och för att ladda in den i Vim lägger du filen i mappen .vim/colors/ i din hemkatalog. Om inte mappen finns får du skapa den först. Därefter kan du använda ditt färgschema i Vim genom att skriva :colorscheme mitt_färgschema . Glöm inte att aktivera syntaxmarkering först med :syntax enable.

När du hittat ett färgschema du trivs med kan du lägga in det i din .vimrc med colorscheme mitt_färgschema .

Exempelfil

basic.vim är en färdig .vimrc med många bra basic-inställningar. Kopiera texten i filen och lägg den i din egna .vimrc i hemkatalogen. Läs igenom den så att du förstår vad inställningarna gör.

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.

Tips Slutför Vims interaktiva handledning innan du gör diagnosen.

Sammanfattning

  • 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.
    1. [operator][siffra][rörelse]
    2. [siffra][operator]
    3. [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.
  • .vimrc är en konfigurationsfil var i man kan skräddarsy och spara sina inställningar.
Starta och avsluta
vim rapport.txt Startar Vim i skalfönstret och öppnar filen rapport.txt. Om filen inte finns skapas en ny med namnet rapport.txt.
:wq Sparar alla ändringar i filen och avslutar Vim.

Förflyttning av markör

	
    |
    k
- h   l -  : Flyttar markören ett steg.
    j 
    |
	
  • 0 - Flyttar markören till början av raden
  • $ - Flyttar markören till slutet av raden
  • w - Flyttar markören till början på nästa ord.
  • b - Flyttar markören till föregående ord.
Modes
i Starta Insert mode.
v Starta Visual mode.
esc Gå tillbaka till Normal mode.
Kombinationer
d2h Klipp ut 2 karaktärer 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.
3dd Klipp ut 3 rader inklusive radbrytning.
2yy Kopiera 2 rader inklusive radbrytning.
5j Flyttar markören 5 steg nedåt.
Sök & ersätt
/i Söker efter mönstret i och flyttar markören till nästa matchning från markören.
n Gå till nästa matchning av mönstret.
* Gå till nästa förekomst av ordet under markören.
:%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.

Diagnos

När du har läst detta avsnitt är det dags att göra diagnos D11. Vim . Gå till kursrummet i Lisam och klicka på Test i vänstermenyn.


Så här roligt har ankorna i universitetsparken!


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2023-08-21