2013-03-03 89 views
8

我讀了jedi-vim的自述文件。 https://github.com/davidhalter/jedijedi-vim omni完成與非標準庫

omni完成非標準庫(Django)的截圖。

我用pip安裝了django,並嘗試了完全相同的代碼來測試Django的全部完成,但它不起作用。

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

標準庫的omni完成工作正常。

我通常使用一些非標準的庫,所以我想使用這些庫的omni完成。

我應該做一些配置來使用非標準庫的omni完成嗎?

+0

請發表'set omnifunc'和':messages' – 2013-03-05 18:41:38

+0

或許相關:http://stackoverflow.com/questions/2084875/vims-omnicompletion-with-python-just-doesnt-work。總之,檢查一下':py print(sys.path)'顯示的內容。 – Yosh 2014-08-07 09:30:40

回答

2

大多數第三方庫應該開箱即用,Django對自動完成功能不太好,您需要在您的環境中設置變量DJANGO_SETTINGS集合,否則大多數導入都會引發配置不正確的異常,並且自動完成功能不起作用。

你VIRTUALENV您可以設置此變量,或者在你的shell一個別名,或使用這樣的事情在你的.vimrc

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() 

這是假設你正在使用virtualenv爲您的項目,並可能打擾你,如果你使用virtualenv不是django的東西。

我也推薦你看看you complete me plugin,它是一個很棒的完整插件,它不是jedi的替代品,事實上,它已經把jedi作爲python完成的依賴。