大多數第三方庫應該開箱即用,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完成的依賴。
請發表'set omnifunc'和':messages' – 2013-03-05 18:41:38
或許相關:http://stackoverflow.com/questions/2084875/vims-omnicompletion-with-python-just-doesnt-work。總之,檢查一下':py print(sys.path)'顯示的內容。 – Yosh 2014-08-07 09:30:40