UPD: il mio Vim-fu non è forte come quelli di @ ib o di @ sehe, quindi potresti voler usare le soluzioni suggerite al posto del mio.
Tuttavia, la mia soluzione è più facile da modificare e eseguire il debug personalmente per me (come un apprendista Vim), quindi lascia che sia qui comunque.
È possibile aggiungere la seguente funzione temporanea nel vimrc
:
function! MyTmpFunc()
:%y
:%s/old1/new1/g
normal! G
normal! P
:%s/old2/new2/g
endfunction
quindi riavviare Vim con i file necessari per influenzare (qualcosa come vim myfile1.txt myfile2.txt myfile3.txt
), ed eseguire il seguente comando:
:argdo call MyTmpFunc()
Questo è quello che hai descritto nella tua domanda: funzione MyTmpFunc()
w essere chiamato per ogni argomento dato a Vim.
Ora è possibile eliminare MyTmpFunc()
da vimrc.
Si noti inoltre con :bufdo
- chiama un comando per ciascun buffer aperto. C'è anche :windo
, che esegue il comando per ogni finestra, ma personalmente ho trovato il :bufdo
il più utile.
Inoltre, non è necessario creare una funzione temporanea se è necessario eseguire un solo comando in ciascun buffer. Dire, se è necessario solo per sostituire "old1
" a "new1
" in ogni buffer, quindi è possibile eseguire il seguente comando:
:bufdo %s/old1/new1/g
e il gioco è fatto.
fonte
2012-05-04 05:30:53
Che bello! Funziona Ho appena aggiunto | w al primo comando : argdo% y | % s/old1/new1/g | $ pu | % s/old2/new2/g | w – Pansy
@ Pansy. Giusto. Buona chiamata Ho sempre ": autowrite autoread' abilitato (ho comunque un annullamento persistente e il controllo della versione per il resto) – sehe
In caso di necessità di eseguire ognuna delle due sostituzioni solo su una copia del testo originale, si può evitare di impostare un segno manualmente: ': argdo% y |% s/o1/n1/g | $ pu | '[, $ s/o2/n2/g'. –