I forrige luke fortalte jeg om min reise inn i Vim-verden og hvordan jeg ble overrasket over at det faktisk ikke var så magisk. Men hvilke konkrete fordeler og ulemper har verktøyet og hvordan kan man bruke det? I dagens luke skal vi se på dette for å starte smått på reisen inn i en mer effektiv hverdag.
Hvorfor gidde å bruke Vim?
Vim krever at man benytter seg av terminalen* og det krever innsats for å lære seg, så hvorfor gjøre det? Det er mange argumenter både for og mot, men her er en liten oversikt:
| Fordeler | Ulemper |
| Lynrask redigering av store mengder tekst | Bratt læringskurve |
| Vim keybindings finnes overalt (Gmail lar deg lese gjennom mail med J/K) | Ren tekst, ingen formattering |
| Kan unngå bruk av mus, mer ergonomisk | Mindre intuitivt enn GUI programmer |
| Enormt konfigurerbart, hvis du ikke liker noe så kan du endre det | Parprogrammering er mer tungvint |
| Stort miljø for plugins som kan gjøre alt mulig | Oppsett kan knekke pga plugins er inkompatible |
| Ren tekst, kan lagres hvor som helst (Onedrive, Jottacloud, lokalt, ...) | Utvikling krever ekstra oppsett, ikke plug-and-play |
| Rask navigasjon i tekstfiler | Må bruke terminalen* |
| Passer godt inn i utviklingsarbeidsflyt med Git o.l. | Konfigurering tar tid og er et evighetsprosjekt |
| Minimalistisk brukergrensesnitt | |
| Superraskt og tar nesten ingen ressurser på PCen/Macen |
* Når jeg sier at Vim må benytte seg av terminalen mener jeg programmet Vim. Det finnes utallige steder å bruke Vim sine keybindings, slik som Microsoft Word og Outlook, VSCode, IntelliJ IDEA, nettlesere, det er antageligvis en Vim plugin til programmene du bruker hvis du leter. Personlig bruker jeg IdeaVim i det daglige og Vim i terminalen når jeg skriver notater.
Hvordan bruker man Vim?
I forrige luke lærte vi om enkel bevegelse ved hjkl, skriving av tekst med i, lagring og lukking med :w, :q, og :wq. Det her holder så vidt for å ta enkle notater, så nå skal vi heller se litt mer på hva det vil si at Vim er en "modal editor":
Hele kjernen til Vim handler om at man har forskjellige moduser når man jobber med tekst. Det er altfor mange til å liste opp, men de to aller viktigste som dekker mesteparten av det man gjør er "normal mode" og "insert mode". Normal mode er den modusen Vim åpnes opp i, man kommer hit ved å trykke på <Escape>. Insert mode kommer man inn i ved å trykke på i i normal mode, her fungerer ting som forventet, altså at det man trykker på blir skrevet i fila.
Når man jobber i Vim så jobber man hovedsakelig i Normal mode, så går man inn i insert mode for å skrive akkurat det man skal, før man går ut igjen. Fordelene som Normal mode gir er mange, blant annet raskere bevegelse i filen enn piltastene. Istedenfor å trykke l mange ganger for å komme seg til neste ord så kan man trykke w (word) og dermed hoppe til det neste ordet. Her kan man også slenge på et antall foran 2w hopper 2 ord fremover.
Dette er en setning for [å] vise hvordan ting funker.
I eksempelsetningen så har vi pekeren vår på bokstaven å, hvis vi nå trykker på w så havner vi på bokstaven v i "vise". Man kan gjøre det tilsvarende bakover med b (back) og da havne på f-en i "for". Det vil si at hvis jeg vil legge til et ord til mellom "ting funker" så kan jeg enten trykke på l til pekeren er der, trykke w 4 ganger, eller trykke 4w etterfulgt av i for så å skrive det jeg vil ha der. Noen ganger vil man også komme til slutten av et ord istedenfor til neste, da kan man trykke på e (end of word) for å få pekeren på siste bokstaven i ordet.
En vanlig ting å gjøre når man skriver tekst er å legge til tekst på slutten av linjen man er på. Da kan man benytte seg av $ tasten for å flytte pekeren til slutten og trykke på a (append) for å gå i Insert mode bak siste bokstaven. Man kan også trykke A direkte uavhengig av hvor man er for å legge til (Append) på slutten av linja. Det finnes tilsvarende hurtigtast for starten av linja: tallet 0 flytter pekeren dit og I (Insert) setter deg direkte i Insert på starten av linja.
Tastene w, b, $, 0 og e kalles bevegelser (motions) og kan kombineres med noen spesielle taster som kalles operatorer. Tanken her er som lego, når man har alle de forskjellige delene så kan man kombinere de og gjøre akkurat det man ønsker, operator + bevegelse = handling. Operatorer gjør ikke noe på egenhånd, men krever en bevegelse. De viktigste operatorene er d (delete) og c (change). Med dw så sletter man et ord fremover, så i eksempelet over så ville dette slettet "å ", her kan man også benytte antall d2w sletter "å vise ". c gjør akkurat det samme, men setter deg inn i Insert mode slik at du kan gjøre endringer umiddelbart. Både d og c kan benyttes ved dd og cc for å slette eller endre hele linjen man er på, uavhengig av hvor pekeren er.
Når man er i normal mode så har alle knapper en betydning, noen av de henger veldig tett opp mot hva de gjør d for delete, imens noen er litt mer fjerne, som at gg går til toppen av fila og G går til bunnen. Med andre ord er det en del å lære seg, men når man setter seg ned og tar seg tiden til det så går det overraskende fort. Hvis dette har sparket igang nysgjerrigheten din anbefaler jeg å kjøre programmet vimtutor i terminalen, det kommer med Vim og er en ~30 minutter introduksjon til Vim som lærer deg alt du trenger å vite.
Nå har vi lagt grunnlaget for å lære alt annet man kan gjøre i Vim. Jeg har også lagt ved noen jukselapper i "relatert lesestoff" hvis du vil utforske mer på egenhånd. I de neste artiklene kommer vi til å gå gjennom mer ting som øker effektiviteten din, som å copy-paste og gjøre mer komplekse endringer. God Vimming enn så lenge!
PS: Siden du har kommet til slutten av luka vil jeg gi deg et lite ekstra tips: I insert mode så kan du trykke CTRL og w (<CTRL-w>) samtidig for å slette et ord bakover, akkurat som CTRL + backspace på Windows.
PPS: Hvis du ønsker å bruke musen til å flytte pekeren rundt kan du skrive :set mouse=a , husk å bruke <Escape> hvis det ikke oppfører seg som du ønsker, så er du tilbake i Normal mode