GNU/Linux >> Znalost Linux >  >> Linux

Jak najít a nahradit text ve Vimu

Jak vyhledáváte text ve Vimu?

Stiskněte klávesu /, zadejte hledaný text a stiskněte enter. Je to jako příkaz less.

Ale tato metoda hledání textu vám neumožňuje nahradit nalezený výsledek.

Dovolte mi podělit se o to, jak můžete najít a nahradit ve Vimu .

:%s/foo/bar/gci

Výše uvedený příkaz spustí vyhledávání bez rozlišení velkých a malých písmen, aby našel všechny výskyty vašeho hledaného výrazu (foo) s novým výrazem (bar). S příznakem c požaduje potvrzení před nahrazením jakékoli náhrady.

Dovolte mi jít podrobně a vysvětlit věci jasněji.

Použití náhradního příkazu k vyhledání a nahrazení textu ve Vimu

Myslím, že už víte, že pro spuštění příkazu ve Vimu musíte být v normálním režimu (také známém jako příkazový režim). Stisknutím klávesy Esc vstoupíte do tohoto režimu.

Vim má praktický příkaz :substitue , lze také použít s kratší verzí :s .

Níže je obecná syntaxe náhradního příkazu:

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

Pojďme si tuto syntaxi rozebrat. Cokoli mezi hranatými závorkami '[]' je volitelné.

  • range :Tuto část syntaxe lze použít, pokud chcete substituci mezi uvedenými řádky. Pokud rozsah nezmíníte, nahradí pouze text na aktuálním řádku . (Sdílel jsem tabulku pro rozsah)
  • pattern :Zde zadejte text, který chcete nahradit.
  • string :Toto je řetězec, který nahradí vzor.
  • flags :Chcete-li nahradit všechny výskyty vyhledávacího vzoru, použijte g vlajka. Můžete určit, zda chcete, aby shoda ignorovala malá a velká písmena, použijte i vlajka. Chcete-li ručně potvrdit každou operaci hledání a nahrazení, použijte c vlajka.
  • count :Počet řádků, ve kterých se má text nahradit.
Rozsah Popis
. Aktuální řádek
$ Poslední řádek
% Všechny řádky
x Číslo řádku x
.,+x Od aktuálního řádku do dalších x řádků

Příklady hledání a nahrazení ve Vimu

Pojďme si projít několik příkladů, které demonstrují použití náhradního příkazu ve Vimu.

Níže je snímek obrazovky souboru, který budu používat k demonstraci použití náhradního příkazu ve Vimu.

Základní nahrazení textu

V tomto příkladu jsem se ujistil, že řetězec 'Ahoj' se v souboru vyskytl několikrát alespoň na jednom řádku a vícekrát.

Chci nahradit 'Ahoj' řetězcem 'HI'. Níže je uveden příkaz Vim, který to provede:

:%s/Hello/HI/g

Nahradit potvrzením

Chcete-li nahradit text, ale chtít potvrzení pokaždé, když to uděláte, můžete použít c v náhradním příkazu.

:%s/Hello/HI/gc

Jak můžete vidět z videa, Vim mě pokaždé požádá o potvrzení, než nahradí vzor.

Máte také výzvu, která vypadá jako následující řádek:

replace with HI (y/n/a/q/l/^E/^Y)?

Možnosti z výzvy mají následující význam:

  • y:ano
  • n:ne
  • a:vše
  • q:ukončí se bez nahrazování, ale nevrátí se, jakmile jste již nahradili text
  • l:nahraďte toto a ukončete (přemýšlejte o 'posledním')
  • ^E:Přejděte nahoru (nefunguje v vim-tiny )
  • ^Y:Přejděte dolů (nefunguje v vim-tiny )

Náhrada bez ohledu na malá a velká písmena

Pokud chcete nahradit text bez ohledu na to, zda je napsán velkými nebo malými písmeny, v takovém případě (haha) byste měli použít i příznak v náhradním příkazu.

:%s/hello/HI/gi

Pokud si všimnete, všechny výskyty 'ahoj' nebo 'ahoj' a dokonce i 'ahoj' jsou nahrazeny 'HI'. Toto je substituce vzoru bez rozlišení velkých a malých písmen.

Každé 'ahoj' je nahrazeno 'HI', i když většina 'ahoj' má velké 'H'.

Nahradit text na jednom řádku ve Vimu

Abychom nahradili text na jednom řádku, musíme určit rozsah, který omezuje rozsah nahrazování na aktuální řádek.

K tomu je lepší použít . deskriptor rozsahu.

:.s/Hello/HI/g

Jak vidíte, byl nahrazen pouze vzor v prvním řádku, protože jsem použil tečku '. deskriptor rozsahu.

Bonusový tip:Použití jiného oddělovače

Při pohledu na syntaxi náhradního příkazu jsem zmínil, že vzor a řetězec jsou odděleny lomítkem '/'.

Ale co kdybyste měli text se spoustou lomítek ve vzoru/řetězci, jako je cesta, která se opakuje všude v souboru? Únik před lomítky může být zdlouhavý a někdy ho lze snadno přehlédnout.

Takže místo použití znaku lomítka jako oddělovače můžete použít jiný oddělovač.

Několik oddělovacích znaků, které jsem viděl, jsou # , _ a @ .

Zde je gif, který ukazuje ukázku použití @ jako oddělovač namísto / .

Závěr

Nahrazování textu může být běžným jevem a Vim vám nabízí účinný způsob, jak hledat a nahrazovat vzor řetězcem. Můžete dokonce smíchat regulární výraz v příkazu Vim pro nahrazení.

Pokud se chcete naučit víc než jen základy Vim, vřele doporučuji použít tento program od Jovica Ilic.


Linux
  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  3. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  1. Jak integrovat příkaz MV po příkazu Najít?

  2. Jak nahradit všechny výskyty slova ve všech souborech v příkazovém řádku Linuxu

  3. Jak přidat příkaz do editoru vim?

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak nainstalovat Vim (vi) na Windows 10

  3. Editor Vi a Vim:12 účinných příkladů hledání a nahrazování