jedi-vim omni完成与非标准库

时间:2013-03-03 19:39:00

标签: python vim jedi-vim

我阅读了jedi-vim的自述文件。 https://github.com/davidhalter/jedi

使用非标准库(Django)完成omni的截图。

我通过pip安装了django并尝试了完全相同的代码来测试Django的全向完成,但它不起作用。

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

标准图书馆的全方位完成工作正常。

我通常使用一些非标准库,因此我想对这些库使用omni完成。

我应该进行一些配置以使用非标准库进行omni完成吗?

2 个答案:

答案 0 :(得分: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完成的依赖。

答案 1 :(得分:0)

您可以尝试以下操作:sys.path.append(/path/to/lib)

我将SUMO / TraCI用作非标准库。

在python代码中,我在使用traci方法之前添加了sys.path.append("/path/to/SUMO/tools/"),然后在Vim中完美地完成了工作。