1

我使用youcommpleteme来自动完成协助编写 python 代码。而且我发现内置模块,如osorsimplejson会像魅力一样工作。

但是如果我自己编写了一些模块并且在导入模块后自动完成将不起作用。例如,如果我有这样的 dir 结构:

├── 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()中定义的thisutils.mysqlorm不会自动完成,但如果我写:

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

这将自动完成。

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

那么有没有一种方法可以让我理所当然地获得自动完成助手(无需先打开它)?

4

1 回答 1

0

YouCompleteMe 使用绝地。

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 的位置。

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

于 2015-11-03T10:59:56.660 回答