【问题标题】:jedi-vim omni completion with not standard libraryjedi-vim 全能补全,非标准库
【发布时间】:2013-02-17 20:33:03
【问题描述】:

我阅读了 jedi-vim 的 README。 https://github.com/davidhalter/jedi

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

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

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

标准库的全方位补全工作完美。

我通常使用一些非标准库,所以我想对这些库使用全向补全。

我应该做一些配置来使用非标准库的全向补全吗?

【问题讨论】:

标签: python vim jedi-vim


【解决方案1】:

大多数第三个库应该开箱即用,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 完成的依赖项。

【讨论】:

    【解决方案2】:

    你可以试试这个:sys.path.append(/path/to/lib)

    我使用 SUMO/TraCI 作为非标准库。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多