Mohu provést interaktivní: substituci (hledat & nahradit)?

Někdy používám :s s komplikovaným regexp, který může nebo nemusí být správný, nebo nejsem jistě, když chci nahradit všechny shody.

Existuje nějaký způsob, jak mohu říct Vimovi, aby potvrdil každou nalezenou shodu, než skutečně nahradí text?

Odpověď

Ano! Pro :substitutec >. From :help substitute:

[c] Confirm each substitution. Vim highlights the matching string (with hl-IncSearch). You can type: :s_c "y" to substitute this match "l" to substitute this match and then quit ("last") "n" to skip this match <Esc> to quit substituting "a" to substitute this and all remaining matches {not in Vi} "q" to quit substituting {not in Vi} CTRL-E to scroll the screen up {not in Vi, not available when compiled without the +insert_expand feature} CTRL-Y to scroll the screen down {not in Vi, not available when compiled without the +insert_expand feature} 

Příklad použití je jednoduchý jako koláč:

%s/old/new/gc 

To je velmi užitečné, ale do 2 týdnů jsem o tom nevěděl 🙂 A je to dokonce k dispozici v ol „vi 🙂

Bonusový tip: Můžete také použít :set nowrapscan; to zabrání tomu, aby se Vim při nárazu do spodní části zabalil nahoru. Zjistil jsem, že to je zvláště užitečné při použití příznaku c.

Komentáře

  • Také bych dodal, že pokud chcete nahradit všechny instance old ve stejném řádku (nejen první výskyt), měli byste přidat g na konci příkazu, takže celkem budete mít %s/old/new/gc
  • ach, jo; mám set gdefault takže mám tendenci to zapomenout přidat do příkladů @ e271p314 😅

odpověď

Kromě toho, co Carpetsmoker řekl:

Nastavení &incsearch (set incsearch) ve Vimu je opravdu užitečné. Můžete použijte jej spolu s užitečným a málo známým trikem.

Trik spočívá v vyzkoušení komplexního regexu pomocí / nebo ? příkaz. Vim použije nastavení &incsearch k interaktivnímu zobrazování shod. Onc Pokud jste s regexem spokojeni, můžete použít :%s//replacement k tomu, aby vim použil předchozí vyhledávání.

Všimněte si, jak se část v je prázdné (do tohoto místa jste vložili text, který chcete vyhledat). Necháte-li toto pole prázdné, říkáte Vimu, aby použil předchozí regex vyhledávání. Díky tomu můžete pomocí / vypsat složitý regulární výraz a mít všechny výhody set incsearch a poté použít %s//replacement příkaz ke skutečnému provedení hledání a nahrazení.

Pokud chcete něco podobného incsearch pro :s příkaz, podívejte se vim-over , ale raději používám nativní způsob Vim.

Komentáře

  • Použil jsem variantu tohoto: Stačí použít :%s/pattern/replace/ a poté stisknout u pro vrácení zpět, uvidíte části, které Vim změnil pokud máte hlsearch povoleno. A tento text můžete znovu nahradit ^R.

Odpovědět

Moje oblíbená interaktivní substituce je hledat pomocí / a procházet zápasy pomocí n .

Poté vyberte shodu pomocí g n a poté s nahradit text textem, co se mi líbí .

A opakujte přesunutím na další zápas a stisknutím klávesy .

Komentáře

  • Toto je velmi pěkný trik, protože je: (1) interaktivní, (2) můžete jít na předchozí zápas, pokud jste omylem přeskočili to (něco, co pomocí :s/old/new/gc) udělat nemůžete.

Odpovědět

V Neovimu je také

, která vám umožní zobrazit náhled výsledku příkazu :s během jeho psaní.

Odpověď

Ve prospěch všech byla incsearch ve vim8 aktualizována, aby při psaní vzoru zobrazovala také náhled

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *