Linux

Hitta och ersätt i Vim / Vi

Hitta och ersätt i Vim / Vi

Den här artikeln beskriver hur du hittar och ersätter text i Vim / Vi.

Vim är den mest populära kommandoradstextredigeraren. Den kommer förinstallerad på macOS och de flesta Linux-distributioner. Att hitta och ersätta text i Vim är snabbt och enkelt.

Grundläggande sök och ersätt #

I Vim kan du hitta och ersätta text med :ersättning (: s) kommando.

För att köra kommandon i Vim måste du vara i normalt läge, standardläget när du startar redigeraren. För att gå tillbaka till normalt läge från vilket annat läge som helst, tryck bara på Esc-tangenten.

Den allmänna formen för ersättningskommandot är som följer:

: [range] s / pattern / string / [flags] [count] 

Kommandot söker in varje rad [räckvidd] för en mönster, och ersätter den med en sträng. [räkna] är ett positivt heltal som multiplicerar kommandot.

Om inte [räckvidd] och [räkna] anges, ersätts endast mönstret i den aktuella raden. Den aktuella raden är den rad där markören placeras.

För att till exempel söka efter den första förekomsten av strängen 'foo' i den aktuella raden och ersätta den med 'bar', skulle du använda:

: s / foo / bar / 

För att ersätta alla förekomster av sökmönstret i den aktuella raden, lägg till g flagga:

: s / foo / bar / g 

Om du vill söka och ersätta mönstret i hela filen använder du procentsatsen % som ett intervall. Detta tecken anger ett intervall från första till sista raden i filen:

:% s / foo / bar / g 

Om den sträng del utelämnas, den betraktas som en tom sträng och det matchade mönstret raderas. Följande kommando raderar alla förekomster av strängen 'foo' i den aktuella raden:

: s / foo // g 

I stället för snedstrecket (/) kan du använda alla andra icke-alfanumeriska tecken med en enda byte utom som en avgränsare. Det här alternativet är användbart när du har tecknet '/' i sökmönstret eller ersättningssträngen.

: s | foo | bar | 

För att bekräfta varje byte, använd c flagga:

: s / foo / bar / gc 
ersätt med stapel (y / n / a / q / l / ^ E / ^ Y)? 

Tryck y för att ersätta matchen eller l för att ersätta matchen och sluta. Tryck n att hoppa över matchen och q eller Esc att sluta byta. De a alternativet ersätter matchen och alla återstående händelser av matchen. Använd för att bläddra nedåt på skärmen CTRL + Y, och för att bläddra uppåt, använd CTRL + E.

Du kan också använda reguljära uttryck som sökmönster. Kommandobälgen ersätter alla rader som börjar med 'foo' med 'Vim är bäst':

:% s / ^ foo.* / Vim är bäst / gc 

De ^ (caret) symbol matchar början på en rad och .* matchar valfritt antal tecken.

Skiftlägeskänslighet #

Som standard är sökningen skiftlägeskänslig. sökning efter "FOO" matchar inte "Foo".

För att ignorera skiftläget för sökmönstret, använd i flagga:

: s / Foo / bar / gi 

Ett annat sätt att tvinga ignorera ärendet är att lägga till \ c efter sökmönstret. Till exempel, / Linux \ c utför ignorera fallssökning.

Om du har ändrat standardinställningen för ärenden och vill utföra skiftlägeskänslig sökning använder du Jag flagga:

: s / foo / bar / gi 

Versal \ C efter mönstret tvingas också sökning efter fall.

Sökområde #

När inget intervall anges, fungerar ersättningskommandot endast i den aktuella raden.

Området kan vara antingen en rad eller ett intervall mellan två linjer. Linjespecifikationerna är separerade med , eller ; tecken. Området kan specificeras med absolut radnummer eller specialsymboler.

För att till exempel ersätta alla förekomster av 'foo' till 'bar' i alla rader som börjar från rad 3 till rad 10 skulle du använda:

: 3,10s / foo / bar / g 

Intervallet är inklusive, vilket innebär att första och sista raden ingår i intervallet.

Pricken . tecken anger aktuell rad och $ - dollartecknet sista raden. För att ersätta 'foo' i alla rader som börjar från den aktuella raden till den sista:

:.,$ s / foo / bar / 

Linjespecifikatorn kan också ställas in med symbolen '+' eller '-', följt av ett tal som läggs till eller subtraheras från föregående radnummer. Om siffran efter symbolen utelämnas är standardinställningen 1.

För att till exempel ersätta varje 'foo' med 'bar' med början från den aktuella raden och de fyra nästa raderna, skriv:

:.,+4s / foo / bar / g 

Ersätta hela ordet #

Ersättningskommandot letar efter mönstret som en sträng, inte som ett helt ord. Om du till exempel letade efter "gnu" matchar sökningen med "gnu" som är inbäddad i större ord, till exempel "cygnus" eller "magnum".

Om du vill söka efter ett helt ord skriver du \< för att markera början på ett ord, ange sökmönstret, skriv \> för att markera slutet på ett ord:

Till exempel för att söka efter ordet ”foo” du skulle använda \:

: s / \/bar/ 

Ersättningshistorik #

Vim håller reda på alla kommandon du kör under den aktuella sessionen. Om du vill bläddra i historiken för tidigare ersättningskommandon anger du : s och använd piltangenterna upp / ned för att hitta en tidigare ersättningsoperation. För att köra kommandot, tryck bara på Stiga på. Du kan också redigera kommandot innan du utför åtgärden.

Exempel #

Kommentarerader (lägg till # före linjen) från 5 till 20:

: 5,20s / ^ / # / 

Kommentarerader från 5 till 20, återställ tidigare ändringar:

: 5,20s / ^ # // 

Ersätt alla förekomster av "äpple", "apelsin" och "mango" med "frukt":

:% s / äpple \ | apelsin \ | mango / frukt / g 

Ta bort efterföljande blanksteg i slutet av varje rad:

:% s / \ s \ + $ // e 

Slutsats #

Att söka och ersätta är en kraftfull funktion i Vim, som gör att du snabbt kan göra ändringar i din text.

Lämna gärna en kommentar om du har några frågor.

Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...
Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...