Jak mogę uruchomić funkcję lub makro w folderze plików?

Odpowiedzi:

10

Możesz użyć -cargumentu, aby uruchomić komendę podczas uruchamiania, z vim(1):

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

Przykład:

vim -c ':call StripWhitespace()' file1 file2

Aby wyjść później, dodaj | :wqa:

vim -c ':call StripWhitespace() | :wqa' file1 file2
Martin Tournoij
źródło
1
Chcesz: argdo, jeśli uruchomisz to dla kilku plików w wierszu poleceń
Christian Brabandt
19

Jeśli jesteś już w Vimie, możesz użyć poleceń :argdolub :bufdo, aby wykonać polecenie odpowiednio dla każdego elementu na liście argumentów lub liście buforów.

np. aby uruchomić :polecenie dla każdego pliku na liście argumentów:

:argdo StripWhitespace

Lub, aby wywołać funkcję z każdego pliku na liście buforów:

:bufdo call StripWhitespace()

Lub, aby uruchomić makro qdla każdego pliku na liście argumentów:

:argdo normal @q

Następnie możesz zapisać wszystkie zmienione bufory za pomocą :walllub zapisać wszystkie i wyjść z Vima za pomocą :wqall.

Jeśli chcesz zapisywać pliki w trakcie pracy, możesz dodać połączenie w następujący :updatesposób:

:argdo s/foo/bar/ge | update

Są różne sposoby na przeniesienie plików do Vima, w tym:

  • Podaj parametry do wiersza poleceń vim: vim *(spowoduje to dodanie wszystkich plików do listy argumentów),
  • Użyj :argspolecenia (które obsługuje symbole wieloznaczne i wyrażenia wsteczne), aby wypełnić listę argumentów, lub :argaddpolecenia, aby dodać do niej pliki,
  • Wystarczy otworzyć je wszystkie ręcznie :e, :Exlub wtyczki plik do otwarcia.
Bogaty
źródło
1
Podoba mi się ta odpowiedź, ponieważ nie wymaga opuszczenia Vima, co moim zdaniem jest zbyt drogie (moja cenna lista buforów!). Mam kilka uwag: (1) pozostawienie buforów bez zapisu wymaga 'hidden'ustawienia; (2) : updatepolecenie jest niewielkim ulepszeniem, :wponieważ zapisuje tylko, jeśli dokonano zmiany, więc :bufdo updatelub :argdo updatezapisze wszystkie zmodyfikowane bufory lub argumenty.
tommcdo
Dobra uwaga na temat update. Zastanawiałem się, czy nie wspomnieć, hiddenkiedy pisałem odpowiedź, ale zdecydowałem się jej odmówić, ponieważ nie chciałem jej nadmiernie komplikować. Jednak po namyśle powinien tam być. Zaktualizuję odpowiedź, aby uwzględnić obecnie obie sugestie.
Bogaty
@tommcdo Właśnie sprawdziłem dokumentację: wall, i zapisuje tylko zmienione bufory, więc: aktualizacja bufdo nie jest w końcu konieczna.
Bogaty
dobry haczyk :wall, który ma tę zaletę, że nie przeskakuje przez bufory i odsuwa cię od miejsca, w którym zacząłeś. Przypuszczam, że :argdo updateto wciąż inna historia - być może nie chcesz pisać do buforów, których nie ma na twojej liście argumentów.
tommcdo
@tommcdo Dobra uwaga.
Bogaty