In meinem .vimrc
versuche ich ftplugin
, einige Befehle zu verwenden und offensichtlich zu verwenden, die sich darauf beziehen, unter der Annahme, dass es erfolgreich geladen wurde. Ich bin jedoch auf ein paar alte Maschinen gestoßen, auf denen das Plugin nicht installiert ist. Kann ich das Laden dieses Plugins irgendwie von Bedingungen abhängig machen filetype on
und ähnliche Anweisungen in denselben bedingten Block einfügen?
Ich habe gesehen, dass es Bedingungen für Farbschemata und die Vim-Version gibt, aber ich habe kein Beispiel gesehen, das nach dem Plugin suchen würde (oder es nicht erkannte).
NB: Sei sanft, ich bin ein VimScript-Anfänger.
~/.vimrc
, sodass Sie die Auswirkungen eines Plugins in Ihrem~/.vimrc
nicht testen können, es sei denn, Sie testen, ob die Plugin-Datei vorhanden ist, oder verschieben den Test, bis Plugins mit einem automatischen Befehl wie z VimEnter.Antworten:
Sie können diesen Block in eine Bedingung einschließen, die mithilfe der
exists()
Funktion überprüft, ob eine vom Plugin definierte Variable, ein Befehl oder eine Funktion als vim bekannt ist.Hier sind ein paar Bits, die ich in Dateien unter ~ / .vim habe:
Beachten Sie, dass sich die obigen Bits in Dateien befinden, die nach normalen Plugins ausgewertet werden, hier ein ftplugin und eine Datei im
after/plugin
Verzeichnis.Eine andere Option wäre die Verwendung von try / catch-Blöcken, obwohl hierfür mindestens Version 7.0 erforderlich ist:
Wenn etwas in dem
try
Abschnitt dieses Blocks fehlschlägt, wird zumcatch
Abschnitt gesprungen . Da dercatch
Abschnitt leer ist, wird er nach derendtry
Anweisung mit dem Rest der Initialisierungsdatei fortgesetzt .Da hierbei der Code manuell geladen wird und nicht ein bereits geladenes Plugin erforderlich ist, kann dies in der .vimrc-Datei selbst erfolgen.
quelle
try
Konstrukt hinzufügen ? Würde der alte Vim das verstehen? Dh wann wurde es eingeführt. Danke und +1 fürs Erste.try
sollte funktionieren. Danke vielmals. Mal sehen, ob noch eine andere Antwort eintrifft. Ansonsten nehme ich natürlich deins an.:silent! {cmd}
, die den Fehler unterdrückt, wenn er{cmd}
nicht existiert. Dies funktioniert sogar in Vim 6.Meine bevorzugte Methode ist nur, die Existenz der Plugin-Datei zu überprüfen. Ich finde das einfacher.
quelle
Dies wollte ich erreichen, indem ich meine Vim-Konfiguration
.vimrc
in mehrerenafter/
Verzeichnissen zusammen hielt. Dies ist die Lösung, die ich mir ausgedacht habe:Überprüfen Sie die Existenz jedes Plugins, indem Sie nach einem einzelnen Befehl suchen, den es bereitstellt
exists()
, und legen Sie dessen Optionen fest, falls vorhanden. (Dies ist genau wie in der akzeptierten Antwort.)Setzen Sie alle Optionen, die auf die obige Weise festgelegt wurden, in eine Funktion (die
SetPluginOptionsNow()
in meinem Code aufgerufen wird ).Rufen Sie diese Funktion für das
VimEnter
Ereignis auf, das beim Aufrufen einer neuen Vim-Sitzung ausgelöst wird - aber entscheidend, nachdem alle Plugins geladen wurden. Aus diesem Grund können unsereexists()
Checks problemlos nach Plugin-Funktionen suchen.Hier ist ein Beispiel aus diesem Teil von mir
.vimrc
.quelle
airline_theme
scheint eine Reihe von Fehlern auszulösen ... Ich bin mir nicht sicher, warum.Noch eine andere Alternative ist die Verwendung
:silent! {cmd}
, die den Fehler unterdrückt, wenn er{cmd}
nicht existiert. Der Hauptvorteil ist, dass es sich um einen kurzen Einzelbefehl handelt. Dies funktioniert sogar in Vim 6 und ist ideal für optionale Dinge.Beispielsweise wird es von Plugins verwendet, die repeat.vim von Tim Pope verwenden , um Zuordnungen wiederholbar zu machen.
quelle
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
work alle Befehle beenden, die dem folgen,!silent
oder ist das immer spezifisch für den nächsten Befehl?:silent!
ist nicht der!silent
Fall und gilt für alle enthaltenen Befehle, außer wenn:unsilent
sie irgendwo im Inneren verwendet werden. (Aber das ist selten.)Ursprünglich in einer anderen Frage gepostet: /programming//a/48178537/2843583
Alternativ können Sie auch einen regulären Ausdruck verwenden, um zu entscheiden, ob das Plugin in Ihrem
runtimepath
:Dies hat den Vorteil, dass es mit Plugins funktioniert, die nur Vimscript-Code im
autoload
Verzeichnis haben, was wiederum nicht erkannt werden kann, wenn .vimrc anfänglich analysiert wird, da die Autoload-Snippets zum Zeitpunkt eines Funktionsaufrufs geladen werden.quelle