2009-03-20 21 views
10

Estoy tratando de obtener una variable expandida en una llamada de comando. Esto es lo que tengo en mis .vimrc:¿Cómo expandir variables en comandos 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 

Al : rápido, la sintaxis `=flist` parece funcionar (o, al menos, lo hizo con una variable w:), pero en el archivo .vimrc No - TlistAddFiles acaba de pasar la cadena `=flist`.


Gracias a Andrew Barnett y respuestas de Mykola Golubyev, ahora tengo esto, que parece funcionar. ¿No hay mejor manera?

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

¿Cuál es la definición de TlistAddFiles? –

+0

Es del plugin de taglist http://vim-taglist.sourceforge.net/ – derobert

+0

¿llama usted a s: TlAddPm (dir) desde .vimrc? –

Respuesta

6

intente Es

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

Para tu edición:

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

TlistAddFiles flist acaba de pasar la cuerda flist. – derobert

+0

TlistAddFiles cadena (unida) .... pasa cadena (unida). Y la línea join() se queja de que se necesita una lista. – derobert

+0

Sí, el ejecutivo parece requerido. – derobert

1

Algo así como

exe "TlistAddFiles `=".flist 

podría funcionar.

+0

Eso está más cerca. Pasa una cadena como Ver/JSON.pm^@ Ver/TT.pm^@ ... solo necesita descubrir cómo dividir en nulo y también pasar cada uno a filenameescape. – derobert

+0

FYI: Usé el exe "TlistAddFilesRecursive". flist ... the '= stuff es una sintaxis extraña que hace que la expansión funcione en el: prompt. – derobert

+0

Creo que el nulo viene de Vim tratando de deshacerse de las líneas nuevas ... – derobert

Cuestiones relacionadas