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
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
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
:%s/pattern/replace/
parancsot használja, majd a visszavonáshoz nyomja meg azu
gombot, így láthatja a Vim által módosított részeket. ha engedélyezte ahlsearch
lehetőséget. Ezt a szöveget újra helyettesítheti a következővel:^R
.