2009-03-20 18 views
10

Tôi đang cố gắng để có được một biến mở rộng trong một cuộc gọi lệnh. Đây là những gì tôi có trong .vimrc tôi:Làm cách nào để mở rộng các biến trong lệnh 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 

Tại : nhanh chóng, cú pháp `=flist` dường như làm việc (hoặc, ít nhất nó đã làm với một biến w:), nhưng trong file .vimrc nó không - TlistAddFiles chỉ cần vượt qua chuỗi `=flist`.


Cảm ơn câu trả lời của Andrew Barnett và Mykola Golubyev, giờ đây tôi đã nhận được câu trả lời này. Có cách nào tốt hơn không?

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

định nghĩa của TlistAddFiles là gì? –

+0

Đó là từ plugin danh sách thẻ http://vim-taglist.sourceforge.net/ – derobert

+0

bạn gọi s: TlAddPm (dir) từ .vimrc? –

Trả lời

6

Hãy thử chỉ

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

Để chỉnh sửa của bạn:

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

TlistAddFiles flist chỉ cần vượt qua chuỗi flist. – derobert

+0

Chuỗi TlistAddFiles (đã tham gia) .... chuyển chuỗi (đã tham gia). Và dòng join() phàn nàn rằng một danh sách là bắt buộc. – derobert

+0

Vâng, các exec dường như yêu cầu. – derobert

1

Something như

exe "TlistAddFiles `=".flist 

có thể làm việc.

+0

Thats gần hơn. Vượt qua một chuỗi như View/JSON.pm^@ View/TT.pm^@ ... chỉ cần tìm ra cách chia nhỏ và cũng chuyển từng chuỗi thành filenameescape. – derobert

+0

FYI: Tôi đã sử dụng exe "TlistAddFilesRecursive". flist ... cú pháp '= stuff là kỳ lạ làm cho việc mở rộng hoạt động tại dấu nhắc:. – derobert

+0

Tôi nghĩ rằng null là đến từ Vim cố gắng để thoát khỏi các dòng mới .... – derobert

Các vấn đề liên quan