Wie gehe ich mit Zeichenfolgen um, die Leerzeichen im Vim-Skript enthalten?

10

Ich habe den folgenden Befehl in meinem vimrc:

execute "set path+=".getcwd()."/**"

Es funktioniert gut, wenn das aktuelle Arbeitsverzeichnis wie ist /home/tamlok/my_work/. Wenn das Verzeichnis jedoch Leerzeichen enthält, wie z. B. D:\Program Files\vim\, wird sich vim beschweren.

Ich nehme an, dass ich dies mit der substitute()Funktion beheben kann, um alle Leerzeichen durch maskierte Leerzeichen zu ersetzen. Was würde ein erfahrener Vimmer hier tun?

Ein weiteres Problem ist das \in Windows. Wenn getcwd()bekommt D:\Program Files\vim\, muss ich das entkommen müssen \mit \\oder ersetzen Sie es durch /?

Im Moment gehe ich so vor:

let mycwd=substitute(getcwd(), '\\', '/', 'g')
let mycwd=substitute(mycwd, ' ', '\\ ', 'g')
execute "set path+=".mycwd."/**"

Ist das in Ordnung? Jede Hilfe wird geschätzt! Vielen Dank!

Tamlok
quelle

Antworten:

14

Die Funktion, die Sie suchen, ist fnameescape(). Alle Sonderzeichen in einer bestimmten Zeichenfolge, die einen Pfad zu einer Datei enthält, der dem Standard des aktuellen Betriebssystems entspricht, werden ausgeblendet.

Mehr dazu unter :help fnameescape()

Immergrüner Baum
quelle
Vielen Dank! Ist /das gleiche wie `\` im Dateipfad in GVim unter Windows?
Tamlok
4
Stimmt, aber hüte dich vor dem Unterschied zwischen fnameescape()und shellescape(). Ersteres wird verwendet, wenn Argumente in der Befehlszeile von Vim übergeben werden, damit sie nicht von Vim belästigt werden. Letzteres wird verwendet, wenn Argumente an externe Befehle übergeben werden, damit diese nicht von der Shell belästigt werden. Unter Windows gibt es auch einen shellslash, der einen großen Einfluss auf die Anzahl der Haare auf Ihrem Kopf hat, wenn Sie sich jemals mit !commandFreunden anlegen müssen .
Sato Katsura
2

Ich hatte das gleiche Problem. Versuchen Sie, nur /in Pfaden zu verwenden, und entkommen Sie solchen Leerzeichen . Zum Beispiel füge ich diese Zeile in mein vimrc ein:

set rtp=C:/Program\ Files\ (x86)/Vim/vim74/vim.exe

Wenn Sie befehlen :echo &rtp, können Sie sehen:

C:/Program Files (x86)/Vim/vim74/vim.exe

Beachten Sie, dass hier kein \Leerzeichen vor steht.

George Lanetz
quelle
Vielen Dank! Ich habe jedoch den Pfad von einem Funktionsaufruf erhalten. Ich glaube, ich kann das Trennzeichen im Pfad nicht steuern. Hier wird eine Escape-Funktion benötigt, genau wie es die ausgewählte Antwort vorschlägt.
Tamlok
@ Tamlok, es tut mir leid, aber ich benutze noch keine Funktionen - Sie sind tiefer als ich :-) Teilen Sie Ihr Wissen, wenn Sie die Antwort finden, bitte)
George Lanetz
Hallo, die Antwort von EvergreenTree ist nur der Schlüssel zur Frage! :) Vielen Dank!
Tamlok
@tamlok, ich bin verwirrt von den Suchergebnissen mit den Worten "evergreentree" in Google. Vielleicht habe ich dich nicht richtig verstanden.
George Lanetz
Hallo, EvergreenTree ist ein Benutzer in StackExchange und hat eine Antwort auf diese Frage gepostet. Siehe oben. :)
Tamlok