1. Non è difficile ottenere il comportamento utilizzando una sostituzione in due fasi:
:,$s/BEFORE/AFTER/gc|1,''-&&
Per prima cosa viene eseguito il comando di sostituzione per ogni riga a partire da quella corrente fino alla fine del file:
,$s/BEFORE/AFTER/gc
Quindi, quel :substitute
comando viene ripetuto con lo stesso modello di ricerca, stringa di sostituzione e flag, utilizzando il :&
comando (vedi :help :&
):
1,''-&&
Quest'ultimo, tuttavia, esegue la sostituzione sull'intervallo di righe dalla prima riga del file alla riga in cui è stato impostato il contrassegno di contesto precedente, meno uno. Poiché il primo :substitute
comando memorizza la posizione del cursore prima di iniziare le sostituzioni effettive, la riga indirizzata da ''
è la riga che era quella corrente prima che il comando di sostituzione fosse eseguito. (L' ''
indirizzo si riferisce allo
'
pseudo-marchio; vedere :help :range
e :help ''
per i dettagli.)
Notare che il secondo comando (dopo il |
separatore di comandi, vedere
:help :bar
) non richiede alcuna modifica quando il modello o le bandiere vengono alterati nel primo.
2. Per salvare un po 'di digitazione, al fine di visualizzare lo scheletro del comando di sostituzione sopra nella riga di comando, si può definire una mappatura in modalità Normale, in questo modo:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
La <c-b><right><right><right><right>
parte finale è necessaria per spostare il cursore all'inizio della riga di comando ( <c-b>
) e poi quattro caratteri a destra ( <right>
× 4), mettendolo così tra i primi due segni di barra, pronto per l'utente per iniziare a digitare il modello di ricerca . Una volta che il modello desiderato e la sostituzione sono pronti, il comando risultante può essere eseguito premendo
Enter.
(Si potrebbe considerare di avere //
invece che ///
nella mappatura sopra, se si preferisce digitare il modello, quindi digitare personalmente la barra di separazione, seguita dalla stringa di sostituzione, invece di usare la freccia destra per spostare il cursore su una barra di separazione già presente che inizia la parte di ricambio.)
\vpattern
- Pattern "molto magico": i caratteri non alfanumerici sono interpretati come simboli speciali di espressioni regolari (non è necessario l'escape)