Вопрос

Я пытаюсь расширить переменную при вызове команды.Вот что у меня есть в моем .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`.


Благодаря ответам Эндрю Барнетта и Николая Голубева у меня теперь есть это, и это работает.Нет ли лучшего способа?

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