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.

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”.


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.


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


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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.