Denne artikkelen beskriver hvordan du finner og erstatter tekst i Vim / Vi.
Vim er den mest populære kommandolinjeditoren. Den kommer forhåndsinstallert på macOS og de fleste Linux-distribusjoner. Å finne og erstatte tekst i Vim er raskt og enkelt.
Grunnleggende finn og erstatt #
I Vim kan du finne og erstatte tekst ved hjelp av :erstatning
(: s
) kommando.
For å kjøre kommandoer i Vim, må du være i normal modus, standardmodus når du starter redigereren. For å gå tilbake til normal modus fra hvilken som helst annen modus, trykk bare på Esc-tasten.
Den generelle formen for erstatningskommandoen er som følger:
: [range] s / pattern / string / [flags] [count]
Kommandoen søker i hver linje inn [område]
for en mønster
, og erstatter den med en string
. [telle]
er et positivt heltall som multipliserer kommandoen.
Hvis nei [område]
og [telle]
er gitt, blir bare mønsteret som er funnet i den nåværende linjen erstattet. Den nåværende linjen er linjen der markøren er plassert.
Hvis du for eksempel vil søke etter den første forekomsten av strengen 'foo' i den nåværende linjen og erstatte den med 'bar', bruker du:
: s / foo / bar /
For å erstatte alle forekomster av søkemønsteret i gjeldende linje, legg til g
flagg:
: s / foo / bar / g
Hvis du vil søke etter og erstatte mønsteret i hele filen, bruker du prosenttegnet %
som en rekkevidde. Dette tegnet angir et område fra første til siste linje i filen:
:% s / foo / bar / g
Hvis den string
del er utelatt, blir den betraktet som en tom streng, og det matchede mønsteret blir slettet. Følgende kommando sletter alle forekomster av strengen 'foo' i den nåværende linjen:
: s / foo // g
I stedet for skråstreken (/
), kan du bruke et hvilket som helst annet ikke-alfanumerisk enkeltbyte-tegn bortsett fra som avgrenser. Dette alternativet er nyttig når du har '/' -tegnet i søkemønsteret eller erstatningsstrengen.
: s | foo | bar |
For å bekrefte hver bytte, bruk c
flagg:
: s / foo / bar / gc
erstatt med stolpe (y / n / a / q / l / ^ E / ^ Y)?
trykk y
å erstatte kampen eller l
for å erstatte kampen og slutte. trykk n
å hoppe over kampen og q
eller Esc
å slutte med erstatning. De en
alternativet erstatter kampen og alle gjenværende forekomster av kampen. Bruk for å bla skjermen ned CTRL + Y
, og for å bla opp, bruk CTRL + E
.
Du kan også bruke vanlige uttrykk som et søkemønster. Kommandobelgen erstatter alle linjer som begynner med 'foo' med 'Vim er best':
:% s / ^ foo.* / Vim er best / gc
De ^
(caret) symbol samsvarer med begynnelsen på en linje og .*
samsvarer med et hvilket som helst antall tegn.
Saksfølsomhet #
Som standard er søkeoperasjonen mellom store og små bokstaver; søker etter “FOO” vil ikke matche “Foo”.
For å ignorere store og små bokstaver for søkemønsteret, bruk Jeg
flagg:
: s / Foo / bar / gi
En annen måte å tvinge ignorere saken på er å legge til \ c
etter søkemønsteret. For eksempel, / Linux \ c
utfører ignorering av saksøk.
Hvis du endret standard saksinnstilling og du vil utføre saksfølsomt søk, bruker du Jeg
flagg:
: s / foo / bar / gi
Stor bokstav \ C
etter at mønsteret også tvinger sakssøking.
Søkeområde #
Når det ikke er angitt noe område, fungerer erstatningskommandoen bare i gjeldende linje.
Området kan være enten en linje eller et område mellom to linjer. Linjespesifikatorene er skilt med ,
eller ;
tegn. Området kan spesifiseres ved hjelp av det absolutte linjenummeret eller spesielle symboler.
For eksempel, for å erstatte alle forekomster av 'foo' til 'bar' i alle linjer som starter fra linje 3 til linje 10, vil du bruke:
: 3,10s / foo / bar / g
Området er inkludert, noe som betyr at første og siste linje er inkludert i området.
Prikken .
tegn angir gjeldende linje og $
- dollartegnet den siste linjen. Slik erstatter du 'foo' i alle linjer som starter fra den nåværende linjen til den siste:
:.,$ s / foo / bar /
Linjespesifikatoren kan også angis ved hjelp av '+' eller '-' symbolet, etterfulgt av et tall som legges til eller trekkes fra forrige linjenummer. Hvis tallet etter symbolet er utelatt, er det standard 1.
For eksempel å erstatte hver 'foo' med 'bar' som starter fra den nåværende linjen og de fire neste linjene, skriv:
:.,+4s / foo / bar / g
Erstatter hele ordet #
Erstatningskommandoen ser etter mønsteret som en streng, ikke et helt ord. Hvis du for eksempel søkte etter "gnu", samsvarer søket med "gnu" som er innebygd i større ord, for eksempel "cygnus" eller "magnum".
For å søke etter et helt ord, skriv inn \<
For å markere begynnelsen på et ord, skriv inn søkemønsteret, skriv \>
for å markere slutten på et ord:
For eksempel for å søke etter ordet "foo" du vil bruke \
:
: s / \/ bar /
Erstatningshistorie #
Vim holder styr på alle kommandoene du kjører i den aktuelle økten. For å bla gjennom historikken for tidligere erstatningskommandoer, skriv inn : s
og bruk pil opp / ned-tastene for å finne en tidligere erstatningsoperasjon. For å kjøre kommandoen, trykk bare på Tast inn
. Du kan også redigere kommandoen før du utfører operasjonen.
Eksempler #
Kommentarlinjer (legg til #
før linjen) fra 5 til 20:
: 5,20s / ^ / # /
Kommentarlinjer fra 5 til 20, tilbakestill de forrige endringene:
: 5,20s / ^ # //
Erstatt alle forekomster av 'eple', 'oransje' og 'mango' med 'frukt':
:% s / eple \ | oransje \ | mango / frukt / g
Fjern etterfølgende mellomrom på slutten av hver linje:
:% s / \ s \ + $ // e
Konklusjon #
Søke og erstatte er en kraftig funksjon i Vim, som lar deg gjøre endringer i teksten din raskt.
Legg gjerne igjen en kommentar hvis du har spørsmål.