Molto spesso mi trovo nel bisogno di eseguire una sostituzione che avrà corrispondenze risparmiate su un file di grandi dimensioni e con espressioni di ricerca e sostituzione non banali.
Ad esempio, supponiamo che io abbia alcune chiamate di funzione come okFunction(arg1, arg2 arg3)
. Gli args differiranno con ogni chiamata di funzione, ovviamente. Ora dì che ho scoperto una funzione migliore che non ha bisogno arg2
. Posso facilmente regolare l'intero file con
:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc
Sebbene concettualmente semplice, non sono sicuro di avere la sintassi giusta in questo schema piuttosto lungo. La c
bandiera aiuta davvero qui, ma il problema è che quando si chiede conferma, vim non mostrerà con quale partita verrà sostituita. Voglio dire, mostrerà l'espressione sostitutiva, ma non il risultato valutato. Se confermo la sostituzione con y
, vim passerà immediatamente alla prossima partita e non sarò in grado di vedere se ho fatto degli errori.
Ho trovato il plugin vim-over che risolve parzialmente il problema, ma solo se tutti i calcoli sono visibili sullo schermo quando si digita il comando. Una volta premuto Invio, il comportamento è esattamente lo stesso che ho descritto sopra e non ottengo un'anteprima.
Quindi, c'è un modo per ottenere vim per valutare l'espressione sostitutiva quando si chiede conferma sui comandi sostitutivi?
%
, controlla che il risultato sia quello che mi aspettavo e poi uso la sostituzione con %
(sono solo alcune battute:) :<up><c-b>%
. Chiaramente un'opzione di anteprima sarebbe molto più efficiente di così. Sebbene non sia disponibile alcuna patch, si potrebbe avvolgere la sostituzione in una funzione vimscript con questo tipo di opzione, ma suona come un sacco di lavoro ...