سؤال

وأنا أحاول الحصول على متغير الموسعة في مكالمة الأوامر. وهنا ما لدي في بلدي .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

وفي موجه :، يبدو بناء الجملة `=flist` للعمل (أو على الأقل فعلت مع متغير w:)، ولكن في .vimrc تودعه لا -. TlistAddFiles يتم تمرير مجرد `=flist` سلسلة


وبفضل أندرو بارنيت وإجابات ميكولا Golubyev، ولقد حصلت الآن هذا الذي يبدو للعمل. ليس هناك طريقة أفضل؟

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
هل كانت مفيدة؟

المحلول

وحاول فقط

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

لتحرير الخاص بك:

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

نصائح أخرى

وشيء من هذا القبيل

exe "TlistAddFiles `=".flist

وقد عمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top