Как расширить переменные в командах vim?
-
21-08-2019 - |
Вопрос
Я пытаюсь расширить переменную при вызове команды.Вот что у меня есть в моем .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
может работать.
Не связан с StackOverflow