Dette er en del av en pågående serie om Vim. Det anbefales at du leser de forrige to lukene før denne. I denne luken skal vi gå gjennom flere tips for å raskt bevege oss rundt, hvordan kopiere og lime inn og hvordan lage sekvenser man kan gjenta.
Nå har vi allerede et godt fundament: Vi vet hvordan vi beveger oss med 0, $, w, b, e og hjkl; vi kan skrive tekst på starten og slutten av linjer med I og A; vi kan slette linjer med dd og endre dem med cc; vi kan hoppe over flere ord med 3w; og vi vet at vi kan kombinere operatorer som d og c med bevegelser som w og $ for å endre deler av teksten.
Vi starter med en eksempelsetning hvor pekeren står på bokstaven "å" for å vise hvordan f (find) og t (opp ned f) fungerer:
Dette er en eksempelsetning for [å] vise hvordan ting fungerer.
ft-> hopper til neste "t" -> "[t]ing"Ft-> hopper til forrige "t" -> "eksempelse[t]ning"ti-> hopper til bokstaven foran nestei-> "[v]ise"Ti-> hopper til bokstaven etter forrigei-> "eksempelsetni[n]g";-> gjenta sistefellerti samme retning,-> gjenta i motsatt retning
* Både f og t søker bare på linjen man befinner seg på, men ; og , kan brukes på andre linjer hvis du flytter pekeren.
Nå har det vært veldig mye prat om å bevege seg, og det med god grunn: Jeg anser det som essensen i hva som gjør Vim så effektivt. Jo mer vant du er med å bevege deg rundt i normal mode, jo raskere kan du gjøre ting i insert mode og andre moduser. Når bevegelsene sitter i fingertuppene så går det nesten like fort som du tenker.
En annen ting man gjør med tekst er å markere den, vanligvis gjøres det med musa, men vi gjør det her selvfølgelig med tastaturet. Og her har vi en ny modus: Visual mode.
Ved å trykke på v så går man inn i denne modusen og markerer tegnene man beveger seg over. Man kan også bruke stor V for å markere hele linjer istedenfor. Når noe er markert kan du benytte operatorene vi allerede er kjent med d og c for å slette og endre teksten.
Her vil jeg også ta frem noen andre fine operatorer: gu og gU for å gjøre den markerte teksten til små bokstaver og STORE BOKSTAVER. Når du er ferdig så kan du avslutte med <Escape> og trykke gv (goto visual-mode) for å markere det samme området på nytt!
Avslutningsvis for dette kapittelet vil jeg dra frem to typer søk til, nemlig søk i hele filer istedenfor bare linjer. For å gjøre dette trykker man på / og skriver inn søket sitt: /foo søker etter ordet "foo" fra der pekeren er til slutten av fila. I mange oppsett wrapper den også rundt til der du står, slik at det i praksis søker gjennom hele fila. Man kan også søke seg bakover med spørsmålstegn ?foo. Her kan man også gjenta søket, men da benytter man n (next) for neste treff i samme retning og stor N for motsatt retning. (Her er det et mønster i søk ved at den store bokstaven gjør det motsatte av den lille :) )
Kunst og håndverk (klipp og lim)
I Vim så har man mulighet for copy/paste, eller som det heter her: yank og put. Ingen god forklaring på navnene, men de funker. Når du vil kopiere noe så må du altså trykke y etterfulgt av en bevegelse, yw kopierer fra pekeren til starten av neste ord. Hvis man vil kopiere fra pekren til slutten av linja så bruker man Y eller y$, og man kan kopiere hele linja med yy. Y og yy trenger altså ingen bevegelse for å kopiere tekst. Når man har markert noe kan man da også yanke (kopiere) det, siden visual mode + operator ≈ operator + bevegelse.
For å lime inn noe etter pekeren så trykker du p. For å lime inn noe foran pekeren så bruker du da P. Dette limer inn det siste du kopierte. Du kan også bruke visual mode og putting til å erstatte tekst. Liten p erstatter tekst og kopierer den teksten som ble fjernet, mens P bare limer inn uten å kopiere teksten som blir fjernet.
⚠️ Alle d kommandoer (dw, dd, dl...) regnes også som å kopiere tekst. Det betyr at hvis du kopierer noe med y for så å slette noe annet med d. Teksten du slettet blir altså puttet med p. Det er litt uvant, men tenk på det som klipp og lim. Klipping og kopiering gjør jo det samme.
Nå over til lukens høydepunkt: Makroer. Vim er ofte brukt på tekst som ligner på annen tekst, det betyr at man gjerne vil gjenta handlinger flere steder. Det er derfor mulig å lagre en sekvens med tastetrykk slik at man kan kjøre de om igjen.
Man starter en sekvens ved å trykke på q etterfulgt av en annen bokstav, eksempelvis qa. Alle tastetrykk man gjør etter dette blir lagret inn i sekvensen "a". Når man har gjort det man ønsker å gjøre så trykker man q for å lagre sekvensen. En sekvens inkluderer alle tastetrykk, inkludert <Escape> m.fl.
En fin sekvens kan for eksempel være å bytte ut et ord med et annet:
- Start sekvens:
qa - Finn ordet:
/foo - Slett ordet og gå til insert mode:
cw - Skriv:
bar - Gå tilbake til normal mode:
<Escape> - Avslutt sekvens:
q
Nå har du en sekvens som erstatter alle "foo" med "bar" og som kan gjentas ved å trykke @a, når en makro er brukt så kan du trykke @@ for å kjøre den igjen. Man kan også her legge til et antall: 10@a erstatter de neste 10 "foo" med "bar".
Dagens luke har vært fullpakket med nye verktøy og konsepter. Jeg anbefaler at du prøver de i praksis for å se hvordan de kjennes ut. Husk også at det tar tid å lære Vim, jeg brukte selv flere måneder før jeg var på nivået som har blitt diskutert i disse tre lukene her.
Men ved å mestre makroer, bevegelser, moduser og operatorer, og kombinasjonen av disse, så vil du se hvordan Vim danner et kraftig og effektivt redigeringsspråk. Når bevegelsene sitter i fingrene og du slipper å tenke for hvert lille hopp, så vil arbeidsflyten bli mye mer flytende og presis. Det er akkurat det som er sjarmen med Vim.
Følg med i neste luke for et praktisk innblikk i hvordan jeg bruker Vim i utviklerhverdagen min.
PS: Eksempelet i makroen kan også erstattes med en enkel kommando :%s/foo/bar/g, som erstatter alle "foo" med "bar" i hele fila. :%s er en av mange kommandoer Vim tilbyr for å skrive og redigere tekst mer effektivt.