Jak uruchomić polecenie Vima z powłoki?

12

To może być głupie pytanie, ale proszę o wyrozumiałość.

Automatyzuję niektóre z typowych czynności, które robię podczas konfigurowania nowego środowiska pracy i chciałbym zautomatyzować polecenie Vima :BundleInstall(do instalowania wszystkich moich wtyczek Vima).

Czy można uruchomić to z powłoki?

Alternatywnie, czy można uruchomić skrypt Vima, wykonać go :BundleInstall, poczekać, aż zakończy się i wyjść?

Dzięki.

imiryczny
źródło

Odpowiedzi:

14

Ze strony podręcznika vim(1):

+ {polecenie}

-c {polecenie}

{polecenie} zostanie wykonane po odczytaniu pierwszego pliku. {polecenie} jest interpretowane jako polecenie Ex. Jeśli {polecenie} zawiera spacje, musi być ujęte w podwójny cudzysłów (zależy to od użytej powłoki). Przykład: Vim „+ set si” main.c

Uwaga: Możesz użyć do 10 poleceń „+” lub „-c”.

Ignacio Vazquez-Abrams
źródło
3
Dzięki! Wiedziałem, że czuję się głupi ...: - / Służy mi za to, że nie przeczytałem dokładnie strony podręcznika. Skończyło się na tym vim +BundleInstall +qall!.
imiric
4

Możesz wykonać swoje polecenie w następujący sposób:

vim -E -c BundleInstall -c q

co pozwoli uniknąć otwierania okna Vima w twoim terminalu.

Uwaga: Moja pierwsza odpowiedź zawierała -sopcję, której potrzebowałem dla innej aplikacji, ale była tutaj niepoprawna, ponieważ zapobiegała znacznej części intimizacji Vima, w tym pozyskiwaniu wtyczki, która zdefiniowała BundleInstallpolecenie.

garyjohn
źródło
1
Dzięki, ale z jakiegoś powodu to dla mnie nie zadziała.
imiric
1
Teraz rozumiem dlaczego. Zapomniałem, że to -snie tylko hamuje niektóre wiadomości - ale także hamuje inicjalizację - więc definicja BundleInstall nie była pozyskiwana. Jednym ze sposobów, aby naprawić to byłoby dodać opcję tak przed pierwszym -c: --cmd 'runtime plugin/bundle.vim'. Edytuj tę nazwę pliku, aby dopasować. Zobaczyć :help -s-ex.
garyjohn
2

Chociaż powyższy przepis vim jest właściwym sposobem, aby to zrobić, zawsze możesz zastosować bardziej ogólne podejście, takie jak autoexpect .

Anonimowy Czyhacz
źródło
0

W sytuacjach, gdy potrzebujesz pełnego załadowania vima, tak jakbyś uruchomił go ręcznie, działa to:

vim -c "autocmd! CursorHold * <commands to run>"

Na przykład chciałem przekierować wyjście :mapdo pliku z powłoki, ale chciałem uchwycić mapowanie, które vim-linie lotnicze tworzy dopiero po wyświetleniu jego tabulatora (linia u góry pokazująca wszystkie otwarte nazwy buforów). Ponieważ wydaje się, że to robi to asynchronicznie po prostu uruchomienie -cprzekierowania do pliku nie dawało mu czasu na mapowanie. Może być lepszy sposób, ale to działa dla mnie, zwłaszcza, że updatetimeustawiłem już 100(0,1 sekundy), co wpływa na to, jak długo CursorHoldzdarzenie zostanie uruchomione . Domyślnie vim ustawia go na 4 sekundy.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
użytkownik1902689
źródło