Nysnø: Snakkes, IDE!
I år satte jeg som et personlig mål å sette meg skikkelig inn i vim, eller rettere sagt neovim, som er en fork av vim, og som har vokst i popularitet de siste årene. De fleste utviklere har sikkert noe kjennskap til vim, enten man har måttet redigere noen filer på en remote server som ikke har stort annet, eller at man har blitt stuck i et modus i terminalen man ikke kommer seg ut av.
Selv begynte jeg å teste vim i VS Code og Rider via vim plugins til disse editorene. Dette fungerer egentlig ganske bra, men man får ikke den fulle opplevelsen vim kan tilby.
Kjenner man ikke til vim, så er det en editor som gir en litt annerledes utvikleropplevelse enn en andre. Man har tre ulike modus, hhv NORMAL, INSERT og VISUAL. I NORMAL mode navigerer man rundt i filer med ulike motions og operators, i INSERT mode skriver man slik man er vant til, mens i VISUAL mode markerer man tekst, noe en antakeligvis ville brukt en mus til.
‘h’, ‘j’, ‘k’, ‘l’ beveger deg hhv ett tegn til venstre, ned, opp og høyre, ‘w’ ett ord frem, ‘b’ ett tilbake osv. Så her er det mye å sette seg inn i, og en relativt bratt læringskurve før det blir komfortabelt. Man slår sammen operators som ‘d’ (delete) og motions som ‘w’ for å slette neste ord. Man kan også legge til en count og si ‘3dw’ for å slette de 3 neste ordene, eller legge til et scope og bruke ‘da”’ for [d]elete [a]round [“], som vil slette rundt en string.
Det finnes mange av disse, og et greit cheat sheet kan sees her: https://vim.rtorr.com/.
Om man ønsker å teste litt har Linux også en innebygd ‘vimtutor’ man kan prøve ved å skrive ‘vimtutor’ i terminalen. Det var her jeg startet med vim, og gikk gjennom denne daglig i en ukes tid, før jeg aktiverte plugins i IDEne jeg brukte.
ThePrimeagen har en knallbra serie om vim, og hvordan bruke det effektivt fra lett til avansert som er verdt å ta en titt på: https://www.youtube.com/playlist?list=PLm323Lc7iSW_wuxqmKx_xxNtJC_hJbQ7R
Kommandoer som for eksempel ‘ci{‘ [c]hange [i]nside [{] er ekstremt nyttig, denne vil slette alt innholdet mellom to curly brackets og etterlate deg i INSERT mode, klar til å skrive.
Alt dette sammen vil potensielt gjøre at man kan bli ekstremt effektiv. Men vim gir deg bare editering av tekst, hva med all annen funksjonalitet man er vandt med fra tunge IDEer som Visual Studio, IntelliJ, Rider osv?
Vi er jo godt vant med autocomplete, forslag, co-pilot, renaming på tvers av filer osv.
Her kommer neovim inn i bildet. Neovim er en fork av vim, og er litt som vim på steroider. Her er det et rikt plugin system, egen package manager og enorme muligheter til å konfigurer ting akkurat slik man ønsker. Neovim konfigureres i lua, så her er det også noe nytt å sette seg inn i 😄
Neovim gir muligheten til å installere Language Servers (LSP) til alle tenkelige språk, og sammen med andre add-ons får man en knallgod utvikleropplevelse.
Et bra startpunkt for å teste neovim er å følge nvim-kickstart fra tjdevries, en av neovims core maintainers: https://github.com/nvim-lua/kickstart.nvim.
Etter hvert er det kanskje interessant å sette opp sin egen config, her finnes det ufattelig mange guider å følge og man kan dra det så langt man skulle ønske, med plugins for debugging, databasehåndtering, copilot, git integrasjoner m.m. Stort sett alt av extensions du finner til VSCode har noen laget en tilsvarende plugin til neovim. Ellers finnes det også egne distributions av neovim som LazyVim (https://www.lazyvim.org/) som gir deg en ferdig opinionert versjon av neovim, men personlig synes jeg dette tar bort litt fra moroa med å gjøre det selv.
Jeg har i hvertfall vært storfornøyd med å bevege meg bort fra VS Code og andre IDE til fordel for neovim. Jeg har nesten ikke behov for å bruke musen lenger, og forlater aldri terminalen, som er veldig behagelig. Det morsomte med vim synes jeg er at man alltid har noen små challenges underveis i løpet av dagen. Hvordan skal jeg mest effektivt få refaktorert denne koden? Hvor få tastetrykk kan jeg klare å redigere denne kodesnutten på osv. Små morsomme oppgaver, som kan gjøre andre mindre spennende oppgaver mer lystbetonte.
Det er dog en bratt læringskurve, og det må litt innsats til for å få alt til å funke. Til C# er det heller ikke optimalt, da community for neovim her er lite, LSP er litt mangelfull, og debug og testing ikke er helt konkurrerende med Visual Studio og Rider. Til React derimot kommer jeg nok aldri til å gå tilbake.