Linux

Find og erstat i Vim / Vi

Find og erstat i Vim / Vi

Denne artikel beskriver, hvordan man finder og erstatter tekst i Vim / Vi.

Vim er den mest populære kommandolinjeteksteditor. Det kommer forudinstalleret på macOS og de fleste Linux-distributioner. Det er hurtigt og nemt at finde og udskifte tekst i Vim.

Grundlæggende søgning og erstat #

I Vim kan du finde og erstatte tekst ved hjælp af :erstatning (: s) kommando.

For at køre kommandoer i Vim skal du være i normal tilstand, standardtilstand, når du starter editoren. For at gå tilbage til normal tilstand fra en hvilken som helst anden tilstand skal du bare trykke på 'Esc' -tasten.

Den generelle form for erstatningskommandoen er som følger:

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

Kommandoen søger hver linje ind [rækkevidde] til en mønster, og erstatter det med en snor. [tælle] er et positivt heltal, der multiplicerer kommandoen.

Hvis nej [rækkevidde] og [tælle] angives, erstattes kun det mønster, der findes i den aktuelle linje. Den aktuelle linje er den linje, hvor markøren er placeret.

For eksempel for at søge efter den første forekomst af strengen 'foo' i den aktuelle linje og erstatte den med 'bar', skal du bruge:

: s / foo / bar / 

For at erstatte alle forekomster af søgemønsteret i den aktuelle linje skal du tilføje g flag:

: s / foo / bar / g 

Hvis du vil søge og erstatte mønsteret i hele filen, skal du bruge det procentvise tegn % som en rækkevidde. Dette tegn angiver et interval fra første til sidste linje i filen:

:% s / foo / bar / g 

Hvis den snor del udelades, betragtes den som en tom streng, og det matchede mønster slettes. Den følgende kommando sletter alle forekomster af strengen 'foo' i den aktuelle linje:

: s / foo // g 

I stedet for skråstregen (/), kan du bruge ethvert andet ikke-alfanumerisk enkeltbyte-tegn undtagen som en afgrænser. Denne indstilling er nyttig, når du har '/' tegnet i søgemønsteret eller udskiftningsstrengen.

: s | foo | bar | 

For at bekræfte hver udskiftning skal du bruge c flag:

: s / foo / bar / gc 
erstat med bjælke (y / n / a / q / l / ^ E / ^ Y)? 

Trykke y at udskifte kampen eller l for at udskifte kampen og afslutte. Trykke n for at springe kampen over og q eller Esc at afslutte udskiftning. Det -en option erstatter kampen og alle resterende forekomster af kampen. Brug for at rulle skærmen ned CTRL + Y, og for at rulle op, brug CTRL + E.

Du kan også bruge regulære udtryk som et søgemønster. Kommandobælgen erstatter alle linjer, der starter med 'foo' med 'Vim er den bedste':

:% s / ^ foo.* / Vim er den bedste / gc 

Det ^ (caret) symbol matcher begyndelsen af ​​en linje og .* matcher et vilkårligt antal af alle tegn.

Sagsfølsomhed #

Som standard er søgefunktionen store og små bogstaver; søgning efter “FOO” svarer ikke til “Foo”.

For at ignorere store og små bogstaver for søgemønsteret skal du bruge jeg flag:

: s / Foo / bar / gi 

En anden måde at tvinge ignorere sagen på er at tilføje \ c efter søgemønsteret. For eksempel, / Linux \ c udfører ignorering af sagsøgning.

Hvis du har ændret standardindstillingen for sager, og du vil udføre sagsfølsom søgning, skal du bruge jeg flag:

: s / foo / bar / gi 

Store bogstaver \ C efter mønsteret tvinger også søgning efter sags match.

Søgeområde #

Når der ikke er angivet noget område, fungerer erstatningskommandoen kun i den aktuelle linje.

Området kan være enten en linje eller et interval mellem to linjer. Linjespecifikationerne er adskilt med , eller ; tegn. Området kan specificeres ved hjælp af det absolutte linienummer eller specielle symboler.

For eksempel at erstatte alle forekomster af 'foo' til 'bar' i alle linjer, der starter fra linje 3 til linje 10, vil du bruge:

: 3,10s / foo / bar / g 

Området er inklusive, hvilket betyder, at den første og sidste linje er inkluderet i området.

Prikken . tegn angiver den aktuelle linje og $ - dollartegnet den sidste linje. For at erstatte 'foo' i alle linjer, der starter fra den aktuelle linje til den sidste:

:.,$ s / foo / bar / 

Linjespecifikatoren kan også indstilles ved hjælp af symbolet '+' eller '-' efterfulgt af et tal, der tilføjes eller trækkes fra det foregående linjenummer. Hvis tallet efter symbolet er udeladt, er det som standard 1.

For eksempel at erstatte hver 'foo' med 'bar' startende fra den aktuelle linje og de fire næste linjer, skriv:

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

Udskiftning af hele ordet #

Erstatningskommandoen ser efter mønsteret som en streng, ikke et helt ord. Hvis du for eksempel søgte efter "gnu", matcher søgningen, hvor "gnu" er indlejret i større ord, såsom "cygnus" eller "magnum".

For at søge efter et helt ord skal du skrive \< For at markere begyndelsen på et ord skal du indtaste søgemønsteret og skrive \> for at markere slutningen af ​​et ord:

For eksempel for at søge efter ordet "foo", du vil bruge \:

: s / \/bar/ 

Erstatningshistorik #

Vim holder styr på alle de kommandoer, du kører i den aktuelle session. For at gennemse historikken for tidligere erstatningskommandoer skal du indtaste : s og brug piletasterne op / ned for at finde en tidligere erstatningshandling. For at køre kommandoen skal du blot trykke på Gå ind. Du kan også redigere kommandoen, før du udfører operationen.

Eksempler #

Kommentarlinjer (tilføj # før linjen) fra 5 til 20:

: 5,20s / ^ / # / 

Ukommenteringslinjer fra 5 til 20, gendanner de tidligere ændringer:

: 5,20s / ^ # // 

Erstat alle forekomster af 'æble', 'appelsin' og 'mango' med 'frugt':

:% s / æble \ | orange \ | mango / frugt / g 

Fjern efterfølgende mellemrum i slutningen af ​​hver linje:

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

Konklusion #

Søgning og erstatning er en kraftfuld funktion i Vim, som giver dig mulighed for hurtigt at foretage ændringer i din tekst.

Du er velkommen til at efterlade en kommentar, hvis du har spørgsmål.

Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...
Mus Sådan ændres venstre og højre museknap på Windows 10-pc
Sådan ændres venstre og højre museknap på Windows 10-pc
Det er en ganske normal, at alle computermusenheder er ergonomisk designet til højrehåndede brugere. Men der er musenheder til rådighed, der er specie...