Come gestire le stringhe contenenti spazi nello script Vim?


10

Ho il seguente comando nel mio vimrc:

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

Funziona bene se l'attuale directory di lavoro è simile /home/tamlok/my_work/. Tuttavia, se la directory contiene spazi, come ad esempio D:\Program Files\vim\, vim si lamenterà.

Suppongo di poterlo risolvere usando la substitute()funzione per sostituire tutti gli spazi con spazi di escape. Cosa farebbe un vimmer esperto qui?

Un altro problema è \in Windows. Se getcwd()arriva D:\Program Files\vim\, devo scappare \con \\o sostituirlo con /?

Per ora lo gestisco così:

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

È ok? Qualsiasi aiuto è apprezzato! Grazie mille!

Risposte:


14

La funzione che stai cercando è fnameescape(). Sfuggirà a tutti i caratteri speciali in una determinata stringa contenente un percorso a un file per abbinare lo standard del sistema operativo corrente.

Per ulteriori informazioni su questo vedere :help fnameescape()


Grazie mille! È /uguale a `\` nel percorso del file in GVim su Windows?
Tamlok,

4
Vero, ma attenzione alla differenza tra fnameescape()e shellescape(). Il primo viene utilizzato quando si passano argomenti sulla riga di comando di Vim, in modo che non vengano molestati da Vim. Il successivo viene utilizzato quando si passano argomenti a comandi esterni, in modo che non vengano molestati dalla shell. Su Windows ce n'è anche shellslash, che avrà una grande influenza sul numero di peli sulla testa se dovessi mai avere problemi con gli !commandamici.
Sato Katsura,

2

Ho avuto lo stesso problema. Prova solo a usarlo /nei percorsi e fuggi dagli spazi bianchi in questo modo . Ad esempio aggiungo questa riga nel mio vimrc:

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

Che se comanderai :echo &rtppuoi vedere:

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

Si noti che qui non c'è \spazio vuoto prima.


Grazie mille! Tuttavia, ho ottenuto il percorso da una chiamata di funzione. Quindi penso di non poter controllare il separatore nel percorso. Qui è necessaria una funzione di escape, proprio come suggerisce la risposta selezionata.
Tamlok,

@tamlok, mi dispiace, ma non uso ancora le funzioni - sei più profondo del Vimer allora io :-) Condividi la tua conoscenza, quando troverai la risposta, per favore)
George Lanetz

Ciao, la risposta di EvergreenTree è solo la chiave della domanda! :) Grazie!
Tamlok,

@tamlok, sono confuso dai risultati di ricerca con le parole "evergreentree" in Google. Forse non ti ho capito bene.
George Lanetz,

Ciao, EvergreenTree è un utente di StackExchange e ha pubblicato una risposta a questa domanda. Vedi sopra. :)
Tamlok,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.