Pergunta

Eu estou tentando obter uma variável expandida em uma chamada de comando. Aqui está o que eu tenho na minha .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

No : pronta, a sintaxe `=flist` parece trabalho (ou, pelo menos ele fez com uma variável w:), mas no arquivo .vimrc isso não acontecer -. TlistAddFiles é só passou a `=flist` corda


Graças a Andrew Barnett e respostas de Mykola Golubyev, eu agora tenho este, que parece trabalho. Não há nenhuma maneira melhor?

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
Foi útil?

Solução

Tente apenas

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

Para a sua edição:

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

Outras dicas

Algo como

exe "TlistAddFiles `=".flist

trabalho poder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top