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.