Etter å ha fått krampe i hånden av å bytte mellom tastatur og mus, kastet jeg meg hodestups inn i Neovim-verdenen. Veien dit har vært bratt, frustrerende og helt verdt det. Her er hva jeg skulle ønske jeg visste da jeg startet.

Det startet med en krampe
Det skjedde for omtrent 2 år siden. Jeg satt en sein høstkveld og måtte skrive kode i vildenssky for å komme i mål med en innlevering, men plutselig stoppet alt opp. Jeg fikk krampe i høyre hånd rett og slett fordi jeg hele tiden måtte bytte mellom tastaturet og musa for å navigere i koden. På ren trass presterte jeg å få levert innleveringen i tide, men i etterdønningene innså jeg at det må finnes bedre måter å skrive kode på.
VSCode utvidelsen
I gangene på NTNU hadde jeg begynt å få nyss om et verktøy som løser akkurat denne problemstillingen. Vim skulle angivelig fjerne behovet for en datamus i det hele tatt. Etter litt googling fant jeg vim-utvidelsen til VSCode og lastet ned denne. Læringskurven var bratt, men etter noen uker hadde jeg et tempo jeg ikke hadde følt på tidligere. Hver gang jeg skulle skrive kode følte jeg meg rett og slett som Bradley Cooper i Limitless.
Men det var fremdeles noe som manglet. Snarveiene i VSCode falt aldri naturlig for meg. I tillegg byttet jeg ofte mellom terminalen og koden, og det var veldig mange features i VSCode jeg rett og slett så på som forstyrrende og ville endre på. Det jeg ble møtt med i dette forsøket var uendelig lange JSON-filer hvor det absolutt ikke var åpenbart hva som måtte gjøres. Vim-utvidelsen i VSCode var en game-changer, men det tok ikke lang tid før jeg lurte: kunne det bli enda bedre?
Er gresset grønnere?
Det tok ikke lang tid før jeg oppsøkte råd fra YouTube. Her fant jeg ThePrimeagen og TJ DeVries som presenterte Neovim. Det de demonstrerte av hastighet inne i koden er noe jeg hverken har sett før eller siden. Med 1-2 tastetrykk kunne de få tilgang til hva enn de trengte. De hadde barbert bort alt det som var "overflødig" og lagt inn kun de verktøyene de brukte selv, og ikke minst: Neovim ligger i terminalen så den er alltid et tastetrykk unna. Jeg var solgt. I juleferien skulle jeg prøve Neovim som kodeeditor.
Feil start: Vim vs Neovim
Førsteinntrykket mitt av Neovim var at dette var en ustabil versjon av det mye bedre Vim. Derfor bestemte jeg meg for å heller starte med programmet Vim. Jeg startet med å se på noen YouTube-tutorials rundt hvordan man setter opp en fungerende Vim-installasjon med konfigureringsspråket Vimscript. Her skal jeg ikke gå i mye detaljer, men jeg anbefaler alle å hoppe over dette steget og heller hoppe rett inn i Neovim og konfigurere med Lua. Dette er det jeg ville kalt gullstandarden i dag om man ser på alternativer til VSCode.
Velkommen til Neovim
Jeg startet med samme tilnærming til Neovim. Så noen YouTube-videoer og fikk en rask oversikt over sentrale konsepter man må kunne for å konfigurere sin egen Neovim-installasjon.
Helt sentralt her er konseptet Language Server Protocol (LSP) som gir oss funksjonalitet som er essensiell om man jager samme muligheter som man finner i VSCode. Med en LSP får man bedre code completion, muligheten til å hoppe mellom definisjoner og referanser i koden samt mange andre "nice to have"-funksjonaliteter.
For å komme godt i gang med å lage sin helt egen Neovim-installasjon fra scratch anbefaler jeg på det varmeste kickstart.nvim, som er en ferdigskrevet konfigurasjon med de essensielle funksjonalitetene man ønsker for å skrive kode på en behagelig måte. En bonus med å bruke dette er at det er laget for nybegynnere og kommer med utfyllende dokumentasjon rundt hva enhver linje i konfigurasjonen gjør og hva man kan endre.
Jeg anbefaler alle å starte her. Dette vil gi deg raskt en forståelse for hva man kan gjøre med Neovim og ruste deg for neste steg.
Dagen alt sluttet å funke
Etterhvert kom dagen enhver person med en egen-konfigurert Neovim installasjon frykter. Til tross for at jeg hadde en fungerende Neovim installasjon, var jeg nødt til å oppdatere utvidelser og Neovim. Dette resulterte i moduler som ikke lengre snakket sammen, og Neovim sluttet rett og slett å funke. Jeg måtte bruke mange timer på å feilsøke problemene og fikk til slutt rettet opp feilen og var i gang igjen, men til hvilken kost? Neovim hadde forårsaket meg mye stress og hodebry, og frustrasjonen stod i taket.
Det var etter dette jeg fant det man kaller Neovim-distribusjoner, som rett og slett er ferdigkonfigurerte Neovim-installasjoner som inneholder alt man trenger og mer. Filosofien bak disse ligner mer på filosofien man finner i VSCode, men til gjengjeld er disse laget av et open source-miljøet som også tar inspirasjon fra Neovim-filosofien. Verktøyet skal aldri komme i veien for hva du som utvikler ønsker å få ut av det. Her kan man som regel lett legge til egne moduler eller fjerne de man ikke ønsker gjennom Lua-kode, samtidig som man får en naturlig stabilitet da det er mange hundretalls utviklere som vedlikeholder distribusjonen. Jeg argumenterer for at disse distribusjonene er en gylden middelvei for de som ønsker fleksibiliteten som ligger i Neovim med stabiliteten til VSCode.
Det finnes mange forskjellige distribusjoner å velge mellom, men de mest populære er AstroNvim og LazyVim. Her kan jeg gå god for sistnevnte rett og slett fordi LazyVim ikke abstraherer bort Lua-koden (som mange distribusjoner får kritikk for) og er ut av boksen en ganske fornuftig konfigurasjon. En liten bonus er at den er skrevet av en av de mest respekterte menneskene i Neovim-miljøet.
Blir man noen gang ferdig med denne reisen?
Svaret på det er nei, men jeg har tro på at man lett kan falle til ro med den installasjonen man lander på til slutt. Jeg tør ikke selv å telle opp hvor mye tid jeg har brukt på å utforske mulige utvidelser jeg kan legge til min Neovim. Jeg ønsker å spare dere for samme tidsstyv og lister opp mine favoritter her:
Lazygit: Git-brukergrensesnitt i terminalen som gjør det lettere å utføre basishandlinger i Git. Jeg har konfigurert Lazygit til å åpnes om jeg trykker space + gg.
Oil.nvim: Jeg greide aldri å lære meg snarveiene i filutforskeren man finner i Neovim. Denne utvidelsen erstatter filutforskeren med en "Neovim buffer". Det betyr at du kan se på filsystemet ditt som en stor tekstfil. Hvis jeg sletter navnet på en fil her, vil det også slettes i filsystemet mitt (med noen sikkerhetsmekanismer).
Mason.nvim: Alle bruker dette til å sette opp LSP og lett laste ned nye. Bruk det!
Hva bringer framtiden
Etter å ha vært gjennom VSCode utvidelser og ustabile Neovim konfigurasjoner har jeg landet på en Neovim-installasjon basert på LazyVim som fullstendig har erstattet VSCode. Koden skrives raskere, hendene mine takker meg, og jeg har full kontroll.
Min anbefaling til deg: Hopp over hele custom config-fasen jeg gikk gjennom. Start med å lese gjennom kickstart.nvim konfigurasjonen for å få en smakebit på hvordan man konfigurerer Neovim. Deretter bruk LazyVim, legg til de få utvidelsene du trenger, og fokuser på å faktisk kode istedenfor å endre editoren din i det uendelige.
Om du er nysgjerrig på bruk av Neovim og Vim generelt, anbefaler jeg deg å følge med videre på Bekk.christmas sine Vim innslag i dagene som kommer.