Wie führe ich den Vim-Befehl über die Shell aus?


12

Dies mag eine dumme Frage sein, aber ertrage sie mit mir.

Ich automatisiere einige der üblichen Dinge, die ich beim Einrichten einer neuen Arbeitsumgebung mache, und möchte den Vim-Befehl automatisieren :BundleInstall(zum Installieren aller meiner Vim-Plugins).

Ist es möglich, dies von der Shell aus auszuführen?

Ist es alternativ möglich, das Skript Vim ausführen zu lassen :BundleInstall, auszuführen , zu warten, bis es beendet ist, und zu beenden?

Vielen Dank.

Antworten:


14

Von der vim(1)Manpage:

+ {Befehl}

-c {Befehl}

{Befehl} wird ausgeführt, nachdem die erste Datei gelesen wurde. {Befehl} wird als Ex-Befehl interpretiert. Wenn der Befehl {Leerzeichen enthält, muss er in doppelte Anführungszeichen gesetzt werden (dies hängt von der verwendeten Shell ab). Beispiel: Vim "+ set si" main.c

Hinweis: Sie können bis zu 10 "+" oder "-c" Befehle verwenden.


3
Vielen Dank! Ich wusste, dass ich mich dumm fühlen würde ...: - / Es tut mir recht, dass ich die Manpage nicht gründlich gelesen habe. Am Ende habe ich verwendet vim +BundleInstall +qall!.
Imiric

4

Sie können Ihren Befehl folgendermaßen ausführen:

vim -E -c BundleInstall -c q

Dadurch wird vermieden, dass ein Vim-Fenster in Ihrem Terminal geöffnet wird.

Hinweis: Meine erste Antwort enthielt die -sOption, die ich für eine andere Anwendung benötigt hatte, die hier jedoch falsch war, da sie einen Großteil der Vial-Initialisierung verhinderte, einschließlich der Beschaffung des Plugins, das den BundleInstallBefehl definierte .


1
Danke, aber aus irgendeinem Grund wird es bei mir nicht funktionieren.
Imiric

1
Jetzt verstehe ich warum. Ich habe vergessen, dass -sdies mehr als nur bestimmte Nachrichten hemmt - es verhindert auch die Initialisierung -, sodass die Definition von BundleInstall nicht bezogen wurde. Eine Möglichkeit, dies zu beheben, besteht darin, vor dem ersten eine Option wie diese hinzuzufügen -c: --cmd 'runtime plugin/bundle.vim'. Bearbeiten Sie den Dateinamen entsprechend. Siehe :help -s-ex.
Garyjohn


0

In Situationen, in denen vim vollständig geladen sein muss, als ob Sie es manuell gestartet hätten, funktioniert dies wie folgt:

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

Zum Beispiel wollte ich die Ausgabe :mapvon der Shell in eine Datei umleiten , aber ich wollte das Mapping erfassen, das vim-airline erst erstellt, nachdem die Tabline angezeigt wurde (Zeile oben zeigt alle geöffneten Buffernamen). Weil es zu funktionieren scheint Das asynchrone Ausführen einer -cUmleitung zu einer Datei ließ keine Zeit, um die Zuordnungen vorzunehmen. Es könnte ein besserer Weg geben, aber das funktioniert für mich, zumal ich bereits updatetimeeingestellt 100(0,1 Sekunden), die bis in dem , wie lange wirkt CursorHoldEreignis ausgelöst wird . Standardmäßig legt vim den Wert auf 4 Sekunden fest.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.