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ć -c
argumentu, 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ń :argdo
lub :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 q
dla każdego pliku na liście argumentów:
:argdo normal @q
Następnie możesz zapisać wszystkie zmienione bufory za pomocą :wall
lub 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 :update
sposó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),:args
polecenia (które obsługuje symbole wieloznaczne i wyrażenia wsteczne), aby wypełnić listę argumentów, lub :argadd
polecenia, aby dodać do niej pliki,:e
, :Ex
lub wtyczki plik do otwarcia.'hidden'
ustawienia; (2) : update
polecenie jest niewielkim ulepszeniem, :w
ponieważ zapisuje tylko, jeśli dokonano zmiany, więc :bufdo update
lub :argdo update
zapisze wszystkie zmodyfikowane bufory lub argumenty.
update
. Zastanawiałem się, czy nie wspomnieć, hidden
kiedy 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 update
to wciąż inna historia - być może nie chcesz pisać do buforów, których nie ma na twojej liście argumentów.