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žijteg
vlajka. Můžete určit, zda chcete, aby shoda ignorovala malá a velká písmena, použijtei
vlajka. Chcete-li ručně potvrdit každou operaci hledání a nahrazení, použijtec
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.