2009-03-20 12 views
10

Próbuję uzyskać zmienną rozwiniętą w wywołaniu polecenia. Oto co mam w moich .vimrc:Jak rozwinąć zmienne w poleceniach vim?

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 

W wierszu : składnia `=flist` wydaje się działać (lub przynajmniej nie ze zmienną w:), ale w pliku .vimrc nie robi - TlistAddFiles właśnie przeszedł ciąg `=flist`.


Dzięki odpowiedziom Andrzeja Barnetta i Mykoły Golubiejewa otrzymałem to, co wydaje się działać. Czy nie ma lepszego sposobu?

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 
+0

jaka jest definicja pliku TlistAddFiles? –

+0

To z wtyczki taglisty http://vim-taglist.sourceforge.net/ – derobert

+0

czy nazywasz s: TlAddPm (dir) z .vimrc? –

Odpowiedz

6

Spróbuj tylko

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

do swojej EDIT:

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

Lista flist TlistAddFiles po prostu przekazuje ciąg flist. – derobert

+0

TlistAddFiles ciąg (złączony) .... przekazuje ciąg (złączony). A linia join() narzeka, że ​​wymagana jest lista. – derobert

+0

Tak, exec wydaje się wymagany. – derobert

1

Coś

exe "TlistAddFiles `=".flist 

może działać.

+0

Thats closer. Przechodzi ciąg znaków, taki jak View/JSON.pm^@ View/TT.pm^@ ... po prostu trzeba dowiedzieć się, jak podzielić na wartość null, a także przekazać każdy plik do nazwy pliku. – derobert

+0

FYI: Użyłem exe "TlistAddFilesRecursive". flist ... '= stuff to dziwna składnia, która sprawia, że ​​ekspansja działa w wierszu:. – derobert

+0

Myślę, że null pochodzi od Vima, próbującego pozbyć się nowych linii ... – derobert