Ich habe ein Vim-Skript, das ein externes Shell-Skript aufruft und die Ausgabe in den aktuellen Puffer liest. Es funktioniert gut in Unix-Systemen. Ich versuche, das Skript OS-agnostisch zu machen, also möchte ich, dass es auch für Windows-Benutzer funktioniert. Hier ist die relevante Zeile aus dem Skript:
%Vor% Laut den Dokumenten von Vim sollte $HOME
auch für Windows-Benutzer funktionieren. Mit gvim auf Win XP im Befehlsmodus,
erzeugt tatsächlich "C: \ Dokumente und Einstellungen \ mein_benutzer".
Mein Vim-Skript (für Backslashes angepasst) schlägt jedoch auf dem Windows-Rechner mit einer Meldung im DOS cmd.exe-Fenster fehl und sagt
$ HOME \ bin \ shell_script "nicht gefunden.
Mit anderen Worten, Vim scheint den Wert von $HOME
nicht zu erweitern, bevor er an cmd.exe übergeben wird.
Ich kann %APPDATA%
auch nicht verwenden, weil Vim %
als aktuelle Datei interpretiert und den Dateinamen an APPDATA
anfügt / anhängt. Seltsam, dass Vim erweitert %
, aber nicht $HOME
erweitert.
Wie bekomme ich $HOME
richtig expandiert? Liegt es daran, dass ich exe
im vim-Skript verwende?
Sie benötigen !
nicht, um eine Datei zu lesen.
Oder lies type
Befehl in Windows (wie cat
in Linux):
Hinweis:
type
wird in der Windows-Shell ausgeführt, daher benötigen Sie \
(Backslash) im Pfad $HOME
space
s enthält, benötigen Sie "
(double-quote), um den Literalwert von space
s Zur Klärung der Antwort von Kev:
Unter Windows wird die Variable $ HOME nicht korrekt expandiert, wenn Sie zur Konsole entkommen. Betrachten Sie zum Beispiel diesen Code:
%Vor%Dies funktioniert, weil vim $ HOME normal erweitert. Auf der anderen Seite wird das nicht funktionieren:
%Vor% Warum? Weil vim alles nach !
an die zugrunde liegende Shell weiterleitet, was unter Windows cmd.exe
ist, was die Umgebungsvariablen %LIKE_THIS%
tut. Wenn Sie versuchen, diese Notation zu verwenden, springt vim hinein und erweitert %
auf den Namen der aktuellen Datei - go figure.
Wie kommt man damit klar? Verwende exe
keyword:
Lassen Sie uns analysieren:
:exe
ist ein Befehl, der eine Zeichenkette annimmt und diese auswertet (denke eval in den meisten Sprachen) "!% "
der Befehl escape to shell. Beachten Sie, dass es so zitiert wird, dass exe es auswerten kann. Beachten Sie auch, dass dort ein extra Platz vorhanden ist, so dass, wenn wir die Home-Variable anhängen, es nicht dagegen ist. .$HOME
Der Punkt ist ein Zeichenfolgenverkettungssymbol. Das $HOME
steht außerhalb der Anführungszeichen, ist jedoch verkettet, so dass es von vim ordnungsgemäß erweitert werden kann
."/myscript"
Pfad zum Skript und mögliche Argumente (auch zitiert)
Wichtig ist hier, dass $HOME
außerhalb der Anführungszeichen steht, andernfalls wird es unter Windows möglicherweise nicht richtig erweitert.
Sie benötigen wahrscheinlich etwas wie die Funktion expand
. Zum Beispiel:
Sie können mehr Informationen über expand () mit :help expand
finden.
Hier haben Sie einige Informationen über Schrägstriche und umgekehrte Schrägstriche in vim:
Wenn Sie lieber Schrägstriche verwenden möchten, legen Sie die Option "Shellslash" fest. Vim wird dann beim Expandieren Backslashes durch Schrägstriche ersetzen Dateinamen. Dies ist besonders nützlich bei Verwendung einer Unix-ähnlichen 'Shell'.
Tags und Links windows vim environment