我使用youcommpleteme自动完成协助编写python代码。我发现像os
或simplejson
这样的内置模块会像魅力一样工作。
但是如果我自己编写了一些模块并在导入模块后自动完成将无法正常工作。例如,如果我有这样的目录结构:
├── 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>
那么有没有办法让自动完成助手理所当然(不先打开它)?
答案 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