Powiedzmy, że mam funkcję o nazwie StripWhitespace.
Mogę uruchomić go na jednym pliku, otwierając go i uruchamiając :StripWhitespace.
Jak mogę automatycznie uruchomić tę funkcję na folderze plików i zapisywać wyniki podczas pracy?
Powiedzmy, że mam funkcję o nazwie StripWhitespace.
Mogę uruchomić go na jednym pliku, otwierając go i uruchamiając :StripWhitespace.
Jak mogę automatycznie uruchomić tę funkcję na folderze plików i zapisywać wyniki podczas pracy?
Odpowiedzi:
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
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:
vim *(spowoduje to dodanie wszystkich plików do listy argumentów),:argspolecenia (które obsługuje symbole wieloznaczne i wyrażenia wsteczne), aby wypełnić listę argumentów, lub :argaddpolecenia, aby dodać do niej pliki,:e, :Exlub wtyczki plik do otwarcia.'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.
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.
: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.