2009-03-20 68 views
10

私は、コマンド呼び出しで変数を展開しようとしています。 TlistAddFiles - :プロンプトで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 

`=flist`構文が動作しているようです(または、少なくともそれはw:変数でやった)が、.vimrcファイルにはそれがない:ここで私は私の.vimrcに持っているものです文字列`=flist`が渡されたばかりです。


アンドリュー・バーネットさんとミコラGolubyevの答えのおかげで、私は今、仕事に表示される、これを持っています。良い方法はありますか?

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

TlistAddFilesの定義は何ですか? –

+0

タグリストプラグインのものです。http://vim-taglist.sourceforge.net/ – derobert

+0

.vimrcからTlAddPm(dir)を呼び出しますか? –

答えて

6

は、あなたの編集するだけで

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

をお試しください:

exe "TlistAddFiles `=".flist 

よう

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

TlistAddFiles flistは文字列flistを渡すだけです。 – derobert

+0

TlistAddFiles文字列(結合)....文字列を渡します(結合しました)。そして、join()行は、リストが必要であると不平を言う。 – derobert

+0

ええ、エグゼクティブが必要と思われます。 – derobert

1

何かがうまくいくかもしれません。

+0

これより近い。 View/JSON.pm^@ View/TT.pm^@のような文字列を渡すだけで、nullを分割する方法を理解し、それぞれをfilenameescapeに渡す必要があります。 – derobert

+0

FYI:exe "TlistAddFilesRecursive"を使用しました。 flist ... '= stuffは、:プロンプトで拡張を行う奇妙な構文です。 – derobert

+0

私はnullがVimから改行を取り除こうとしていると思っています.... – derobert

関連する問題