vim youcompleteme无法自动完成自定义的python模块

时间:2015-10-31 11:03:10

标签: python vim youcompleteme

我使用youcommpleteme自动完成协助编写python代码。我发现像ossimplejson这样的内置模块会像魅力一样工作。

但是如果我自己编写了一些模块并在导入模块后自动完成将无法正常工作。例如,如果我有这样的目录结构:

├── utils
│   ├── DBCUtils.py
│   ├── DBCUtils.pyc
│   ├── email.conf
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── log.py
│   ├── mail.py
│   ├── mail.pyc
│   ├── mysql.conf
│   ├── mysqlorm.py
│   ├── mysqlorm.pyc
│   ├── propertyutils.py
├──test.py

如果在test.py中导入mysqlorm.py:

from utils.mysqlorm import *

session = getSession()

getSession()中定义的utils.mysqlorm将不会自动完成,但如果我写了:

import simplejson as json
json.dumps(dic, indent=4, ensure_asscii=False)

这将自动完成。

我还发现如果我在同一个vim会话中打开mysqlorm.py,文件中定义的所有方法都会自动完成,但我不想打开我导入的每个文件。< / p>

那么有没有办法让自动完成助手理所当然(不先打开它)?

1 个答案:

答案 0 :(得分:0)

YouCompleteMe使用Jedi。

Jedi基于缓冲区vim和sys.path进行自动完成。 为了避免打开python文件,请将它们添加到sys.path。

为此,您可以在.vim / after / ftplugin / my_script.vim中创建脚本

在此脚本中,将当前路径添加到sys.path。

例如:

python << EOF
import os
import sys
sys.path.append(os.getcwd())
EOF

注意,getcwd返回打开vim的位置。

如果您使用的是buildout,则可以使用此脚本:https://github.com/FBruynbroeck/vim-buildout