Linux

Finn og erstatt i Vim / Vi

Finn og erstatt i Vim / Vi

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.

Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...