2013-03-03 35 views
8

Tôi đọc README của jedi-vim. https://github.com/davidhalter/jedihoàn thành omni jedi-vim với thư viện không chuẩn

Có ảnh chụp màn hình hoàn tất omni với thư viện không chuẩn (Django).

Tôi đã cài đặt django bằng pip và thử chính xác cùng một mã để kiểm tra hoàn thành omni của Django, nhưng nó không hoạt động.

Omni completion (^O^N^P) Pattern not found. 

Hoàn thành omni của thư viện chuẩn đang hoạt động hoàn hảo.

Tôi thường sử dụng một số thư viện không chuẩn nên tôi muốn sử dụng hoàn thành omni với các thư viện đó.

Tôi có nên thực hiện một số cấu hình để sử dụng tính năng hoàn thành omni với các thư viện không chuẩn không?

+0

Vui lòng đăng 'đặt omnifunc' và': messages' –

+0

có thể có liên quan: http://stackoverflow.com/questions/2084875/vims-omnicompletion-with-python-just-doesnt-work. Trong ngắn hạn, kiểm tra những gì ': py print (sys.path)' hiển thị. – Yosh

Trả lời

2

Hầu hết thư viện thứ ba sẽ hoạt động tốt, tự động hoàn thành quá trình tự động hoàn thành, bạn cần đặt trong môi trường của mình biến số DJANGO_SETTINGS, nếu không phần lớn nhập sẽ tăng ngoại lệ được định cấu hình không đúng và tự động hoàn thành sẽ không hoạt động .

Bạn có thể đặt biến này trong bạn virtualenv, hoặc với một bí danh trong shell của bạn, hoặc sử dụng một cái gì đó như thế này trong .vimrc của bạn:

function FindDjangoSettings() 
    if strlen($VIRTUAL_ENV) && has('python') 
    let output = system("find $VIRTUAL_ENV \\(-wholename '*/lib/*' -or -wholename '*/install/' \\) -or \\(-name 'settings.py' -print0 \\) | tr '\n' ' '") 
    let outarray= split(output, '[\/]\+') 
    let module = outarray[-2] . '.' . 'settings' 
    let syspath = system("python -c 'import sys; print sys.path' | tr '\n' ' ' ") 
    " let curpath = '/' . join(outarray[:-2], '/') 

    execute 'python import sys, os' 
    " execute 'python sys.path.append("' . curpath . '")' 
    " execute 'python sys.path.append("' . syspath . '")' 
    execute 'python sys.path = ' . syspath 
    execute 'python os.environ.setdefault("DJANGO_SETTINGS_MODULE", "' . module . '")' 
    endif 
endfunction 
autocmd FileType python call FindDjangoSettings() 

này giả định rằng bạn đang sử dụng virtualenv cho các dự án của bạn, và có thể làm phiền bạn nếu bạn đang sử dụng một virtualenv cho cái gì đó không phải là django.

Tôi cũng khuyên bạn nên có một cái nhìn trong you complete me plugin, một plugin hoàn chỉnh tuyệt vời của nó, nó không phải là một thay thế cho jedi, trên thực tế, nó có jedi như là một phụ thuộc cho hoàn thành python.

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