Domanda

Sto cercando di ottenere una variabile espansa in una chiamata di comando. Ecco quello che ho nel mio .vimrc:

command! -nargs=1 -complete=dir TlAddPm call s:TlAddPm(<f-args>)
function! s:TlAddPm(dir)
    let flist = system("find " . shellescape(a:dir) . " -type f -name '*.pm' | sort")
    TlistAddFiles `=flist`
endfun

Al : prompt, il `=flist` sintassi sembra funzionare (o, almeno lo ha fatto con un w: variabile), ma nel <=> file, non lo fa - TlistAddFiles è appena passato il stringa <=>.


Grazie alle risposte di Mykola Golubyev di Andrew Barnett e, ora ho questa, che sembra funzionare. Non c'è modo migliore?

command! -nargs=1 -complete=dir TlAddPm call s:TlAddPm(<f-args>)
function! s:TlAddPm(dir)
    let findres = system("find " . shellescape(a:dir) . " -type f -name '*.pm' | sort")
    let flist = []
    for w in split(findres, '\n')
        let flist += [ fnameescape(w) ]
    endfor
    exe "TlistAddFiles " . join(flist)
endfun
È stato utile?

Soluzione

Prova solo

let joined = join(split(flist))
exec 'TlistAddFiles '.joined

Per la tua modifica:

 let flist = split(findres, '\n')
 call map(flist, 'fnameescape(v:val)')

Altri suggerimenti

Qualcosa di simile

exe "TlistAddFiles `=".flist

potrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top