Linux

Najít a nahradit ve Vim / Vi

Najít a nahradit ve Vim / Vi

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 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ář.

Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...
Hry Jak zobrazit počítadlo FPS v linuxových hrách
Jak zobrazit počítadlo FPS v linuxových hrách
Hraní na Linuxu získalo velký tlak, když společnost Valve v roce 2012 oznámila podporu systému Linux pro klienta Steam a jejich hry. Od té doby se mno...
Hry Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Úvod do hry Civilization 6 je moderní pojetí klasického konceptu představeného v sérii her Age of Empires. Myšlenka byla docela jednoduchá; začali bys...