Er der fejl eller mangler på siden? Så skriv gerne til hacker(snabel-a)matfystutor.dk

Vim

Fra Hackerwiki
Spring til navigation Spring til søgning
En ægte hacker bruger Vim
Grafisk Vim under GTK2

... og så opfandt Gud Vim (Vi IMproved) og så at han havde skabt den perfekte tekst-editor.

Why, oh WHY, do those #?@! nutheads use vi?

Seneste stabile version af Vim

Den seneste stabile version af Vim, kan findes på deres hjemmeside under emnet Version: https://www.vim.org/download.php

Sådan får du Vim

Linux

(Ubuntu/Debian...) Åbn en terminal og skriv

  $ sudo aptitude install vim

(RedHat/Fedora...) Åbn en terminal og skriv

  $ sudo yum install vim

Så skulle du have adgang til Vim (terminalversion) og gVim (GUI-version).

Windows

Gå ind på http://www.vim.org/download.php#pc og download den nyeste fil under emnet "Self-installing executable".

Mac

Macintosh kommer med preinstalled Vim, og kan køres direkte fra terminalen.

For at tjekke hvilken version af Vim din computer kører, kan følgende tastes ind i terminalen:

  vim -v

Såfremt du ikke har den nyeste stabile version (se [[1]]), kan du f.eks. opdatere vha. GUI-versionen Cocoa GUI (MacVim). Dette er den seneste GUI, og den opdateres løbende. Den opfører sig som en almindelig Mac-applikation, men virker på alle måder som terminalversionen. (Andre metoder til opdatering kan ses under emnet Macintosh på Vims egen side: https://www.vim.org/download.php#mac)

Installering af MacVim

Du kan nu køre MacVim GUI'en ved at dobbeltklikke på Vim-ikonet (dette starter programmet i vim command mode)

Brug af Vim

For at lære at bruge Vim, prøv vimtutor:

  • I Linux, Unicer og måske på Mac kan du skrive vimtutor i en terminal for at begynde en lille tutorial.
  • I Windows og på andre systemer, hvor vimtutor i terminalen ikke fungerer, kan du starte Vim (eller gVim) og skrive:
    • :r $VIMRUNTIME/tutor/tutor

Når du er færdig med vimtutoren, kan du udskrive Graphical Vim cheat sheet (kilde), ramme det ind og hænge det op på din monitor.

Husk altid at bruge :help-funktionen, når der er noget, du er i tvivl om. Er du i tvivl om, hvad en tast i normal mode gør, eller i hvilke sammenhænge, du kan bruge den, skriv:

:help c

Hvis du vil vide mere om en kommando, skriv:

:help :s

Hjælp til indstillinger finder du ved indstillingens navn i single quotes:

:help 'incsearch'

Så kan du tage et kig på Vimcasts.org, som er en samling praktiske eksempler med video og lyd på, hvordan din tekstbehandling kan gøres kvikkere med Vim. Som eksempel kan du begynde med Hard wrapping text, som handler om, hvordan du kan bryde linjer ved en bestemt kolonne (og det virker specielt godt i kode og i kodekommentarer - prøv det!), eller en introduktion til Visual Block mode.

Kørsel og afslutning af Vim og gVim

Man kan køre Vim i en konsol med "vim" eller den grafiske udgave gVim, alle ting i denne artikel er gældende for begge versioner. Hvis man ønsker at lukker vim igen skal man blot skrive ":q" i normal mode og ":q!" hvis man ikke ønsker at gemme indholdet af ens buffere (se afsnittet "Buffere").

Her er en liste af de mest brugte varianter:

  • :q - lukker vim eller det aktive vindue, men kun hvis alle ændringer er gemt.
  • :wq - gemmer ens ændringer i det det aktive vindue og lukker vim.
  • :q! - lukker vim eller det aktive vindue uden at gemme ændringer.
  • :qall! - lukker alle vim vinduer og vim og gemmer ikke ændringerne.
  • :wall - gemmer ændringer i alle vinduer.

Navigation

For at navigere i Vim bruger du h,j,k og l eller piltasterne. h,j,k og l er hurtiger når man skal bruge Vim i praksis.

Her er hvad h,j,k og l svarer til på piltasterne:

  • h - venstre.
  • j - ned.
  • k - op.
  • l - højre.
  • 0 - gå til starten af linien.
  • $ - gå til enden af linien.
  • <Ctrl>-f - gå et skærmbillede frem (<Page-Down>)
  • <Ctrl>-b - gå et skærmbillede tilbage (<Page-Up>)
  • <Ctrl>-u - gå et halvt skærmbillede tilbage
  • <Ctrl>-d - gå et halvt skærmbillede frem
  • <number>G - gå til linie <number>.
  • 0G - gå til sidste linie af filen.

Modal editing

Du bruger det meste af tiden i Normal mode, hvor enhver tast på tastaturet har en funktion.

Navigér i Normal mode

  • h,j,k,l - gå venstre, ned, op, højre
  • (w)ord - gå et ord frem.
  • (W)ORD - gå et ORD frem.
  • (b)ack - gå til begyndelsen af ordet.
  • (B)ACK - gå til begyndelsen af ORDET.
  • 0 (nul) - gå til det første tegn i linjen.
  • ^ (hat) - gå til starten af linjen.
  • $ (dollar) - gå til slutningen af linjen.

Se :help motion for mange flere eksempler.

Insert mode

I Insert mode skriver du tekst. Fra Normal mode kan du bruge tasterne

  • (i)nsert - placer gå i Insert mode og skriv tekst før cursoren.
  • (a)ppend - placer gå i Insert mode og skriv tekst efter cursoren.
  • (s)ubstitute - slet en range (standard: et bogstav) og gå i Insert mode.
  • (c)hange (w)ord - tryk cw for at slette fra cursoren til slutningen af ordet
  • (I)nsert - begynd at skrive tekst i starten af linjen.
  • (A)ppend - begynd at skrive tekst for enden af linjen.
  • (C)hange - slet fra cursor til enden af linjen og gå i Insert mode.
  • (S)ubstitute - slet hele linjen og gå i Insert mode.

Se flere eksempler med :help inserting.

Når du er i Insert mode, afslutter du og går tilbage til Normal mode med <Esc>.

  • v - bringer dig til visual mode hvor du kan markere linier ved at bevæge cursoren med h, j, k og l. Visual mode vælger linjer som man gør i andre tekst-editorer (se Visual block mode for en variant).
  • <Ctrl>-v - bringer dig til Visual block mode, hvor du istedet kan udspænde en firkant med h, j, k og l så du kan udklippe midt i en række linier.
  • <Shift>-v - bringer dig i Visual line mode, hvor du vælger hele linjer ad gangen.

Se :help visual-use

Klippe/klistre

Hvis du er i normal mode kan du bruge

  • <number>(dd)elete - slet <number> linier og gem i buffer (default: 1 linje)
  • <number>(yy)ank - kopier <number> linjer til buffer.
  • (p)ut - til at indsæt indholdet af Vim's buffer - Dette er Vim's egen udklipsholder dvs. det du har kopieret med yy eller dd og ikke det som er i OS'ets udklipsholder, hvis du skal bruge OS'ets se næste punkt.
  • "+gP - til at indsæt indholdet af udklipsholderen fra OS'et.
  • "+y - til at kopier det markerede, fra visual- eller visual block-mode, til OS'ets udklipsholder.

Vinduer

Vim har vinduer til lettere at navigere imellem mange filer på engang alle ting vdr. vinduer tilgås med <Ctrl>-w, her kommer en liste over nogle af de mest brugte ting

  • <Ctrl>-w s - splitter det nuværende vindue horisontalt.
  • <Ctrl>-w v - splitter det nuværende vindue vertikalt.
  • <Ctrl>-w <number> < - flytter splittet til <number> tegn til højre.
  • <Ctrl>-w <number> > - flytter splittet til <number> tegn til venstre.
  • <Ctrl>-w c - lukker det nuværende vindue/split.
  • <Ctrl>-w q - lukker det nuværende vindue/split og sletter bufferen (se næste afsnif om buffere), lukker vim hvis der kun er et vindue tilbage.

Åbning og skrivning af filer

For at åbne en fil skriver du ":o <filnavn>" når du er i normal mode, hvor <filnavn> er navnet på filen enten ud fra den sti du står i eller en absolut sti fra roden af dit system "/" under linux og "X:\" under windows. Du kan se hvilken sti du er i nu ved at skrive ":pwd" i normal mode, så vises din nuværende sti i Vim.

For at skrive en fil skriver du ":w <filnavn>" hvis du gemmer en ny fil, og bare ":w" hvis den allerede er gemt med et filnavn. For at skrive i en ny fil/buffer skriver du ":enew" i normal mode.

Her kommer kommandoerne i en hurtig oversigt:

  • :o <filnavn> - åben filen <filnavn>
  • :w <filnavn> - skriv til filen <filnavn>
  • :w - skriv den nuværende fil, som allerede er gemt i et filnavn.

Buffere

Når du arbejder med Vim og åbner en fil åbnes den i en buffer, du kan have mange buffere åbne uden at have mange vinduer åbne og du kan have mange vinduer åbne uden at have mange buffere åbne. Hvis du eks. åbner to filer får du to buffere, som du så kan få vist i dit arbejdsvindue. For at vælge imellem dem bruger du ":bn" for at vælge den næste buffer og ":bp" for at vælge den forrige buffer. Du kan også få vist alle dine buffere i en liste med ":buffers" og så ud fra et af de nummere som står der skrive ":b <number>" hvor <number> er nummeret på den ønskede buffer. En buffer kan også slettes helt fra Vim ved ":bd" som sletter den nuværende buffer, eller ":bd <number>" hvor <number> er den buffer som du ønsker skal slettes fra Vim. Alt dette foregår i normal mode.

Her er en oversigt over de gennemgåede kommandoer

  • :buffers - viser alle ens åbne buffers og giver dem et nummer (se næste punkt).
  • :b <number> - går til bufferen med <number> (se ovenstående).
  • :bd - sletter den nuværende buffer
  • :bd <number> - sletter bufferen med <number>
  • :bn - går til næste buffer (se i rækkefølge som vist i punktet :buffers)
  • :bp - går til forrige buffer (se i rækkefølge som vist i punktet :buffers)

Søgning

For at søge i vim skal man i normal mode skrive "/<search word>" hvor <search word> er ens søgeord, her skal man dog holde øje med hvad man skriver da visse tegn har en speciel betydning i henhold til søgningen, man kan søge på regulære udtryk, eks. er det oplagt at "/" skal escapes, dette gøres med "\/" så backslash "\" er escape tegn. En nærmere oversig over specielle tegn kan fås med ":help /" i normal mode (se afsnittet "Hjælp").

  • /<pattern> - hvor <pattern> er et regulært udtryk man ønsker at søge på

Patterns kan laves med de tre regulære operatorer

  • <r1>\|<r2> - forening hvor <r1> og <r2> er regulære udtryk.
  • <r1>* - kleene stjerne hvor <r1> er et regulært udtryk.
  • <r1><r2> - konkatenering hvor <r1> og <r2> er regulære udtryk.

For at indele udtryk kan bruges "\(" og "\)" som bruges som paranteser for at indkapsle udtryk. Hvis man ønsker at finde "", "ab", "abab", osv. skal man skrive "/\(ab\)*" og ikke "/ab* da dette kun finder udtryk som "a", "ab", "abb", osv.

Af syntaktisk sukker har vi:

  • <r1>\+ - svare til <r1><r1>*.
  • . - svare til abcde... (dvs. et vilkårligt tegn).
  • <r1>\= - matcher præcis 0 eller 1 gang.
  • med mange flere.

Eksempler:

Man ønsker at finde sætningen et nummer "123456" men man kan kun huske delene "12" og "56" af nummeret, så kan man søge på "12.*56" og Vim giver en alle strenge som matcher "12" og "56" med vilkårlige tegn imellem.

Hjælp

Vim har en omfattende indbygget hjælpefunktion som tilgås med ":help" fra normal mode. Herved kommer der en indholdsfortegnelse samt en kort beskrivelse af hvert afsnit, man kan så følge hvert afsnit ved at placere ens cursor over det og trykke <Ctrl>-] og hvis man ønsker at komme tilbage til der hvor man var sidst kan man bruge <Ctrl>-t, bemærk at disse taster også kan bruges til at navigere mellem buffere i Vim.

Man kan også bruge ":help <search word>" hvor <search word> kan være en kommando eks. ":w" for at få en beskrivelse af hvad denne gør, som eksempler kan nævnes ":help pattern" som giver hjælp omkring regulære udtryk, ":help ctrl-t" som giver hjælp omkring taste kombinationen <Ctrl>-t til at springe tilbage til sidste buffer/hjælp-side og ":help ctrl-w" som forklare alle de forskellige vindue kommandoer som er tilgændelige.

Her er en liste over de mest bruge kommandoer til at få hjælp og navigere i hjælpfilerne med:

  • :help - viser indholdsfortegnelsen på Vims indbyggede hjælp.
  • :help <search word> - søger i hjælpsystemet under ordet <search word>.
  • <Ctrl>-t - bringer en tilbage til sidste buffer/hjælpe-side.
  • <Ctrl>-] - følger hjælpelink under cursor. Man kan evt. bruge <Ctrl>-5 hvis man bruger dansk tastatur.

For den let øvede Vim bruger

.vimrc

Når man bruger Vim meget er der ofte ting man vil have tændt/slukket for hver gang man bruger Vim, og det er i .vimrc-filen at dette indstilles - som ligger i "~/" på linux og i "C:\Programmer\Vim" på windows og her hedder filen "_vimrc" og ikke ".vimrc". Som eksempler kan nævnes "set numbers" som slår linienumre på i venstre siden af ens vinduer, "colorscheme darkblue" som giver et mørkeblåt farveskema i Vim og "set cindent" som giver korrekt indentering når man skriver C-kode.

Her kommer en eksempel på en .vimrc-fil:

  set tabstop=2                         " Makes tabs 2 spaces wide
  set shiftwidth=2                      " Makes the autoindentation indents 2 spaces wide
  set textwidth=80                      " Makes the textwidth 80 characters long
  set number                            " Shows linenumbers in the left side of the buffer
  colorscheme darkblue                  " Sets at nice darkblue colorscheme for Vim
  set cindent                           " Sets C indentation for .c-files
  set guifont=Lucida_Console:h9:cANSI   " Sets the textfont of the GUI to Lucida_Console in size 9