例如,我有一个使用Google App Engine SDK的Python脚本:
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
模块db
有一个子模块Key
,所以我尝试在其上使用自动完成功能:
db.K
标签
但是在Vim窗口的底部,我得到以下内容:
-- Omni completion (^O^N^P) Pattern not found
如何包含非标准Python库的路径,以便Vim自动完成可以找到它们?还要展示他们的文档字符串?
答案 0 :(得分:3)
您需要将库文件添加到代码文件中。例如,如果您在位于env /:
的虚拟环境中通过pip安装了Google App Enginevirtualenv --no-site-package env/
source env/bin/activate
pip install google_appengine
...然后你应该执行:
ctags -R --python-kinds=-i -o tags env/
如果你没有通过pip安装google_appengine,那么你应该找到你的python库的路径(提示:它应该由$ PYTHONPATH表示。并且根据this参考页面:“在Unix上,这是通常。:/ usr / local / lib / python。“)并用您找到的路径替换env /。
最后,您的.vimrc文件应该解析您的标记文件。例如,在我的.vimrc中,我有:
set tags+=/path/to/my/tags
答案 1 :(得分:1)
我从natw的vimrc(我想......也许是sontek)中抓住了这个,但它应该可以解决这个问题,只要你的软件包可以通过你当前的Python安装找到。这允许您使用gf,但也设置搜索这些文件以进行自动完成。注意py <<EOF
部分,它开始用Python解释的部分。这意味着您必须在vim中安装python解释器才能使用它。
function! LoadPythonPath()
py <<EOF
# load PYTHONPATH into vim, this lets you hover over a module name
# and type 'gf' (for goto file) and open that file in vim. Useful
# and easier than rope for simple tasks
import os.path
import sys
import vim
for p in sys.path:
if os.path.isdir(p):
vim.command(r"set path+=%s" % (p.replace(" ", r"\ ")))
EOF
endfunction
顺便说一下,我不喜欢自动加载这个,所以我把它设置为一个函数,当我调用它/首先输入一个Python文档时,它会智能地加载/卸载。我在上一个函数中添加let g:PythonPathLoaded=1
。
function! GetPythonPath()
if !exists("g:PythonPathLoaded")
call LoadPythonPath()
return
elseif g:PythonPathLoaded
return
else
call LoadPythonPath()
endif
endfunction
我也有卸载功能......虽然我不确定这是否会产生巨大的影响。
function! UnloadPythonPath()
py <<EOF
# load PYTHONPATH into vim, this lets you hover over a module name
# and type 'gf' (for goto file) and open that file in vim. Useful
# and easier than rope for simple tasks
for p in sys.path:
if os.path.isdir(p):
vim.command(r"set path-=%s" % (p.replace(" ", r"\ ")))
EOF
let g:PythonPathLoaded = 0
endfunction
希望这有帮助!另外,一个额外的好处是,无论你是否使用virtualenv,它都会加载你的软件包(因为它,我认为,此时运行的是'python')。