2013-01-02 20 views
8

ho un elenco di file che ho aperto in VIM usando questo comando:Utilizzando il comando VIM su tutti i file aperti

vim `cat list.txt` 

Sto cercando di eseguire questo comando su tutti i file aperti:

:99,104 norm i# 

(da 99 a 104 linee, inserire un commento "#") < --simple, funziona

Quando eseguo il comando di cui sopra per inserirlo funziona come previsto sul file corrente. Come faccio a ottenere VIM per eseguire esattamente lo stesso comando su tutti i file aperti? Ho provato :argdo, :windo, :bufdo ma non ho avuto fortuna.

Qualche suggerimento?

risposta

11

immagino bufdo potrebbe funzionare, se avete set hidden (per consentire bufdo per cambiare buffer senza salvare) prima:

:set hidden 
:bufdo 99,104 norm i# 

quindi salvare tutti i file con :bufdo! w o :wa.

(Nota: set hidden potrebbe essere sostituito con set autowrite pure.)

+0

Grazie, ho perso il ": set di nascosto". Saluti. –

3

Penso sed sarebbe una scelta migliore, se è possibile utilizzarlo. sed è un editor da riga di comando piuttosto che un editor interattivo come vim.

sed -i '99,104s/^/#/' list of files 
+1

'sed' è un editor _stream_. Se vuoi un (vero) editor di testo che può essere guidato da uno script o dalla riga di comando, ci sono 'ed' e' ex'. –

1

Poiché tutti i file sono stati forniti come argomenti, :argdo è il comando corretto. (A meno che non si aprano altri file, anche lo :bufdo funzionerebbe.) Se non si desidera eseguire lo :set hidden (come indicato nell'altra risposta), è necessario mantenere immediatamente il buffer tramite :update. Perché si sta utilizzando un comando :normal, è necessario racchiuderlo tra :execute per essere in grado di concatenare un altro comando Es:

:argdo 99,104 execute 'norm i#' | update 
Problemi correlati