Tento článek popisuje, jak najít a nahradit text ve Vim / Vi.
Vim je nejoblíbenější textový editor příkazového řádku. Dodává se předinstalovaný na macOS a většině distribucí Linuxu. Hledání a nahrazování textu ve Vimu je rychlé a snadné.
Základní hledání a nahrazení #
Ve Vimu můžete najít a nahradit text pomocí :náhradní
(: s
) příkaz.
Chcete-li spouštět příkazy ve Vimu, musíte být v normálním režimu, což je výchozí režim při spuštění editoru. Chcete-li se vrátit do normálního režimu z jakéhokoli jiného režimu, stačí stisknout klávesu „Esc“.
Obecná forma náhradního příkazu je následující:
: [rozsah] s / vzor / řetězec / [příznaky] [počet]
Příkaz prohledá každý řádek [rozsah]
pro vzor
, a nahradí jej a tětiva
. [počet]
je kladné celé číslo, které násobí příkaz.
Jestli ne [rozsah]
a [počet]
jsou uvedeny, je nahrazen pouze vzor nalezený v aktuálním řádku. Aktuální řádek je řádek, kde je umístěn kurzor.
Například pro vyhledání prvního výskytu řetězce 'foo' v aktuálním řádku a jeho nahrazení 'barem' byste použili:
: s / foo / bar /
Chcete-li nahradit všechny výskyty vzoru hledání v aktuálním řádku, přidejte G
vlajka:
: s / foo / bar / g
Pokud chcete vyhledat a nahradit vzor v celém souboru, použijte znak procenta %
jako rozsah. Tento znak označuje rozsah od prvního do posledního řádku souboru:
:% s / foo / bar / g
Pokud tětiva
část je vynechána, je považována za prázdný řetězec a odpovídající vzor je odstraněn. Následující příkaz odstraní všechny instance řetězce 'foo' v aktuálním řádku:
: s / foo // g
Místo lomítka (/
), můžete použít jakýkoli jiný nealfanumerický jednobajtový znak kromě oddělovače. Tato možnost je užitečná, pokud máte ve vyhledávacím vzoru nebo v náhradním řetězci znak „/“.
: s | foo | bar |
Pro potvrzení každé náhrady použijte C
vlajka:
: s / foo / bar / gc
nahradit bar (y / n / a / q / l / ^ E / ^ Y)?
lis y
nahradit zápas nebo l
nahradit zápas a skončit. lis n
přeskočit zápas a q
nebo Esc
ukončit substituci. The A
volba nahradí zápas a všechny zbývající výskyty zápasu. Chcete-li posunout obrazovku dolů, použijte CTRL + Y
, a pro posun nahoru použijte CTRL + E
.
Jako vyhledávací vzor můžete také použít regulární výrazy. Příkaz níže nahradí všechny řádky začínající na „foo“ za „Vim je nejlepší“:
:% s / ^ foo.* / Vim je nejlepší / gc
The ^
Symbol (stříška) odpovídá začátku řádku a .*
odpovídá libovolnému počtu libovolných znaků.
Citlivost písmen #
Ve výchozím nastavení se při hledání rozlišují velká a malá písmena; vyhledávání výrazu „FOO“ nebude odpovídat výrazu „Foo“.
Chcete-li ignorovat velká a malá písmena pro vyhledávací vzor, použijte i
vlajka:
: s / Foo / bar / gi
Další způsob, jak vynutit ignorování velkých a malých písmen, je připojit \C
po vyhledávacím vzoru. Například, / Linux \ c
provádí vyhledávání případů ignorovat.
Pokud jste změnili výchozí nastavení malých a velkých písmen a chcete provádět vyhledávání malých a velkých písmen, použijte Já
vlajka:
: s / foo / bar / gi
Velká písmena \C
po vzoru také vynutí hledání shody případů.
Rozsah vyhledávání #
Pokud není zadán žádný rozsah, náhradní příkaz funguje pouze v aktuálním řádku.
Rozsah může být buď jeden řádek, nebo rozsah mezi dvěma řádky. Specifikátory řádků jsou odděleny znakem ,
nebo ;
postavy. Rozsah lze určit pomocí absolutního čísla řádku nebo speciálních symbolů.
Například k nahrazení všech výskytů výrazu „foo“ výrazem „bar“ ve všech řádcích počínaje řádkem 3 až řádkem 10 byste použili:
: 3,10 s / foo / bar / g
Rozsah je inkluzivní, což znamená, že do rozsahu je zahrnut první a poslední řádek.
Tečka .
znak označuje aktuální řádek a $
- znak dolaru poslední řádek. Nahrazení výrazu „foo“ ve všech řádcích počínaje od aktuálního řádku po poslední:
:.,$ s / foo / bar /
Specifikátor řádku lze také nastavit pomocí symbolu „+“ nebo „-“, za nímž následuje číslo, které je přidáno nebo odečteno od čísla předchozího řádku. Pokud je číslo za symbolem vynecháno, je výchozí hodnota 1.
Chcete-li například nahradit každý výraz „foo“ výrazem „bar“ počínaje od aktuálního řádku a od čtyř následujících řádků, zadejte:
:.,+4 s / foo / bar / g
Nahrazení celého slova #
Náhradní příkaz hledá vzor jako řetězec, ne jako celé slovo. Pokud jste například hledali „gnu“, hledání najde shody, kde je „gnu“ vloženo do větších slov, například „cygnus“ nebo „magnum“.
Chcete-li vyhledat celé slovo, zadejte \<
Chcete-li označit začátek slova, zadejte vyhledávací vzor a zadejte \>
označit konec slova:
Například k vyhledání slova „foo“ byste použili \
:
: s / \/bar/
Náhradní historie #
Vim sleduje všechny příkazy, které spouštíte v aktuální relaci. Chcete-li procházet historii předchozích náhradních příkazů, zadejte : s
a pomocí kláves se šipkami nahoru / dolů vyhledejte předchozí náhradní operaci. Chcete-li spustit příkaz, jednoduše stiskněte Enter
. Před provedením operace můžete také upravit příkaz.
Příklady #
Řádky komentářů (přidat #
před řádkem) od 5 do 20:
: 5,20 s / ^ / # /
Odkomentujte řádky od 5 do 20, vraťte předchozí změny:
: 5,20s / ^ # //
Nahraďte všechny výskyty výrazů „jablko“, „pomeranč“ a „mango“ výrazem „ovoce“:
:% s / jablko \ | pomeranč \ | mango / ovoce / g
Odstraňte koncové mezery na konci každého řádku:
:% s / \ s \ + $ // e
Závěr #
Hledání a nahrazování je výkonná funkce Vimu, která vám umožní rychle provádět změny v textu.
Pokud máte jakékoli dotazy, neváhejte zanechat komentář.