Как расширить переменные в командах vim? - PullRequest
11 голосов
/ 20 марта 2009

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

В приглашении : синтаксис &#96;=flist&#96;, кажется, работает (или, по крайней мере, он работал с переменной w:), но в файле .vimrc это не так - TlistAddFiles просто передается строка &#96;=flist&#96;.


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

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

Ответы [ 2 ]

6 голосов
/ 20 марта 2009

Попробуйте просто

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

Для редактирования:

 let flist = split(findres, '\n')
 call map(flist, 'fnameescape(v:val)')
1 голос
/ 20 марта 2009

Что-то вроде

exe "TlistAddFiles `=".flist

может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...