Wie werden Windows-Umgebungsvariablen in Vim-Skript verwendet?

8

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,

%Vor%

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?

    
Nick Coleman 19.02.2012, 03:03
quelle

4 Antworten

6

Sie benötigen ! nicht, um eine Datei zu lesen.

%Vor%

Oder lies type Befehl in Windows (wie cat in Linux):

%Vor%

Hinweis:

  • Die type wird in der Windows-Shell ausgeführt, daher benötigen Sie \ (Backslash) im Pfad
  • Wenn $HOME space s enthält, benötigen Sie " (double-quote), um den Literalwert von space s
  • beizubehalten
kev 19.02.2012 04:10
quelle
4

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:

%Vor%

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.

Tuxmentat 13.04.2012 01:11
quelle
1

Sie benötigen wahrscheinlich etwas wie die Funktion expand . Zum Beispiel:

%Vor%

Sie können mehr Informationen über expand () mit :help expand finden.

    
Amir Eldor 15.01.2014 07:47
quelle
0

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

    
Kamil 19.02.2012 03:23
quelle

Tags und Links