2013-01-02 3 views
8

Mam listę plików i już otwarty w VIM poleceniem:Używając polecenia VIM na wszystkich otwartych plików

vim `cat list.txt` 

szukam uruchomić to polecenie na wszystkich otwartych plików:

:99,104 norm i# 

(od 99 do 104 linii, wstaw komentarz „#”) < --simple, pracuje

po uruchomieniu powyższego polecenia, aby wstawić to działa zgodnie z oczekiwaniami w bieżącym pliku. Jak uzyskać, aby VIM uruchamiał dokładnie to samo polecenie dla wszystkich otwartych plików? Próbowałem :argdo, :windo, :bufdo, ale nie miałem szczęścia.

Wszelkie sugestie?

Odpowiedz

11

Chyba bufdo będzie działać, jeśli masz set hidden (aby umożliwić bufdo zmienić bufory bez zapisywania) przed:

:set hidden 
:bufdo 99,104 norm i# 

Następnie zapisz wszystkie pliki z :bufdo! w lub :wa.

(Uwaga: set hidden można zastąpić set autowrite również.)

+0

Dzięki, brakowało mi „: zestaw ukryty”. Twoje zdrowie. –

3

myślę sed byłoby lepszym rozwiązaniem, jeśli można go używać. sed jest edytorem wiersza poleceń, a nie interaktywnym edytorem takim jak vim.

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

'sed' jest edytorem _stream_. Jeśli potrzebujesz edytora (oryginalnego) _tekstowego, który może być sterowany ze skryptu lub wiersza poleceń, mamy 'ed' i' ex'. –

1

Bo masz wszystkie pliki dostarczane jako argumenty, :argdo jest poprawne polecenie. (O ile nie otworzysz innych plików, zadziała też :bufdo. Jeśli nie chcesz :set hidden (jak wskazano w drugiej odpowiedzi), musisz natychmiast utrzymywać bufor przez :update. Ponieważ używasz polecenia :normal, trzeba ująć go w :execute aby móc łączyć inne polecenie Ex:

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