13 Stimmen

Wie erweitert man Variablen in Vim-Befehlen?

Ich versuche, eine Variable in einem Befehlsaufruf zu expandieren. Hier ist, was ich in meinem .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

In der : Eingabeaufforderung, die `=flist` Syntax scheint zu funktionieren (oder zumindest funktionierte sie mit einer w: Variable), sondern in der .vimrc Datei ist das nicht der Fall - TlistAddFiles wird nur die Zeichenkette `=flist` .


Dank der Antworten von Andrew Barnett und Mykola Golubyev habe ich jetzt diese Lösung gefunden, die zu funktionieren scheint. Gibt es keinen besseren Weg?

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

7voto

Mykola Golubyev Punkte 54937

Versuchen Sie einfach

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

Zu Ihrer Bearbeitung:

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

3voto

Andrew Barnett Punkte 4826

Etwas wie

exe "TlistAddFiles `=".flist

könnte funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X