I'm trying to get a variable expanded in a command call. Here's what I have in my .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
At the :
prompt, the `=flist`
syntax seems to work (or, at least it did with a w:
variable), but in the .vimrc
file it doesn't — TlistAddFiles is just passed the string `=flist`
.
Thanks to Andrew Barnett's and Mykola Golubyev's answers, I've now got this, which appears to work. Is there no better way?
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
Try just
let joined = join(split(flist))
exec 'TlistAddFiles '.joined
To your edit:
let flist = split(findres, '\n')
call map(flist, 'fnameescape(v:val)')
Something like
exe "TlistAddFiles `=".flist
might work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With