Pregunta

Estoy intentando conseguir una variable expandida en una llamada de comando. Aquí es lo que tengo en mi .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 : rápido, la sintaxis `=flist` parece funcionar (o, al menos lo hizo con un w: variable), pero en el <=> presentar no es así - TlistAddFiles se acaba de aprobar la cadena <=>.


Gracias a las respuestas de Mykola Golubyev de Andrew Barnett y, ahora tengo esto, que parece funcionar. ¿No hay una mejor manera?

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
¿Fue útil?

Solución

Trate simplemente

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

Para tu edición:

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

Otros consejos

Algo así como

exe "TlistAddFiles `=".flist

podría funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top