Tudok-e csinálni egy interaktív: helyettesítőt (keresés & helyettesítés)?

Néha :s -t használok egy bonyolult regexp-kel, ami lehet, hogy nem helyes, vagy nem ” biztos vagyok benne, hogy le akarom cserélni az összes egyezést.

Mondhatom-e valamilyen módon, hogy a Vim megerősítse minden megtalált egyezést, mielőtt a szöveget ténylegesen lecseréli?

Válasz

Igen! Használja a c jelzőt a :substitute. 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} 

A példa használata egyszerű, mint a pite:

%s/old/new/gc 

Ez nagyon hasznos, de erről csak 2 hete tudott 🙂 És még ol-ban is elérhető: vi 🙂

Bónusztipp: Érdemes használni a :set nowrapscan; ez megakadályozza, hogy a Vim felfelé tekerjen, amikor az aljára kerül. Ezt különösen hasznosnak találtam a c zászló használatakor.

Megjegyzések

  • Azt is hozzátenném, hogy ha a old összes példányát le akarja cserélni ugyanarra a sorra (nem csak az első esetre), akkor adjon hozzá g a parancs végén, így összesen %s/old/new/gc
  • ó, igen; nekem van set gdefault ezért inkább elfelejtettem hozzáadni a @ e271p314 példákhoz examples

Válasz

Amellett, hogy a Carpetsmoker elmondta:

A Vim &incsearch (set incsearch) beállítása valóban hasznos. használja egy hasznos és kevéssé ismert trükkel együtt.

A trükk az, hogy kipróbálja a komplex regexet az / vagy a parancs. A Vim a &incsearch beállítást használja a mérkőzések interaktív megjelenítéséhez. Onc Ha elégedett vagy a regexszel, a :%s//replacement paranccsal használhatod az előző keresést.

Figyelje meg, hogy a üres (oda helyezi a szöveget keresésre). Ha üresen hagyja, akkor azt mondja a Vimnek, hogy használja az előző keresési szabályt. Ezzel beírhat egy komplex regexet az / paranccsal, és élvezheti a set incsearch összes előnyét, majd használhatja a %s//replacement parancs a keresés tényleges végrehajtásához és cseréjéhez.

Ha valami hasonlót szeretnél az incsearchhez a :s parancsokhoz, nézd meg a vim-over , de én inkább a natív Vim módot használom.

Megjegyzések

  • Ennek egy változatát használtam: Csak a :%s/pattern/replace/ parancsot használja, majd a visszavonáshoz nyomja meg az u gombot, így láthatja a Vim által módosított részeket. ha engedélyezte a hlsearch lehetőséget. Ezt a szöveget újra helyettesítheti a következővel: ^R.

Válasz

Kedvenc interaktív helyettesítésem az, ha keresgélek a / segítségével, és a meccseket végigmegyem a n .

Ezután válassza a egyezést a g használatával n , majd s helyett a szöveget tetszés szerint .

És ismételje meg a parancsot úgy, hogy a következő mérkőzésre lép, és megnyomja a .

Megjegyzések

  • Ez egy nagyon szép trükk, mert: (1) interaktív, (2) mehetsz az előző meccsre, ha véletlenül kihagytad ez (valami, amit nem tehet meg a :s/old/new/gc használatával).

Válasz

A Neovimban található a

opció, amely lehetővé teszi a :s parancs eredményének megtekintését gépelés közben.

Válasz

Mindenki javára a incsearch frissítésre került a vim8-ban, hogy a minta beírásakor az előnézet is megjelenjen

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük