jedi-vim与非标准库的全自动补全
我看了jedi-vim的说明文档。
在这里有一些使用非标准库(比如Django)的自动补全的截图。
我通过pip安装了Django,然后用完全相同的代码来测试Django的自动补全,但它没有工作。
Omni completion (^O^N^P) Pattern not found.
标准库的自动补全运行得很好。
我通常使用一些非标准库,所以我想在这些库上也能使用自动补全。
我需要做什么配置才能在非标准库上使用自动补全吗?
2 个回答
1
你可以试试这个:sys.path.append(/path/to/lib)
我用的是SUMO/TraCI这个非标准库。
在我的Python代码中,我在使用traci方法之前加了sys.path.append("/path/to/SUMO/tools/")
,这样在Vim中代码补全就能完美工作了。
2
大多数第三方库都可以直接使用,但Django在自动补全方面就没那么友好了。你需要在你的环境中设置一个叫做 DJANGO_SETTINGS
的变量,否则大部分导入会出现配置不当的错误,自动补全也就无法正常工作了。
你可以在你的虚拟环境中设置这个变量,或者在你的命令行中用别名设置,或者在你的 .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
,如果你在做其他非Django的项目时使用虚拟环境,这可能会让你觉得麻烦。
我还建议你看看 you complete me 插件,这是一个很棒的补全插件,它并不是用来替代jedi的,实际上,它的Python补全功能依赖于jedi。