设置
在我的.vimrc中,我有以下几行:
" .vimrc let g:virtualenv_directory="/Users/Kit/Development/virtualenv"
然后在〜/ .vim / ftplugin / python / virtualenv.vim中我有这些:
py << EOF import os.path import sys import vim if 'VIRTUAL_ENV' in os.environ: project_base_dir = os.environ['VIRTUAL_ENV'] sys.path.insert(0,project_base_dir) activate_this = os.path.join(project_base_dir,'bin/activate_this.py') execfile(activate_this,dict(__file__=activate_this)) print "virtualenv in os.environ!" EOF VirtualEnvActivate my-virtualenv-python-2.7
在〜/ .vim / ftplugin / python / virtualenv.vim中我有这些SuperTab设置:
setlocal omnifunc=pythoncomplete#Complete setlocal completeopt=menuone,longest,preview let g:SuperTabDefaultCompletionType="<c-x><c-]>"
在我的工作目录中,我始终处于工作状态,我执行了以下bash命令,为所有的.py文件生成一个TAGS文件
find . -name '*.py' -type f -print0 | xargs -0 etags -l python
问题
例如,我有一个main.py,其中有一个对象应用程序,以便以下脚本正常工作:
import main new_app = main.app() # works totally fine Python-wise
例如,如果我写了一些新的代码,并尝试使用SuperTab omnicompletion:
import main new_new_app = main.<Tab>
这是我得到的:
new_new_app = mainself.
如果我按Tab几次:
new_new_app = mainselfselfselfself.
对我有用
但是,如果我执行以下操作:
new_new_app = main.a<Tab>
我得到一个..对象的完整列表,包括那些不属于模块主体的对象.
我想要的是
如果我在.vimrc中设置以下内容:
let g:SuperTabDefaultCompletionType="context"
然后,我使用标准Python库中的一个模块:
import sys sys.<Tab> # This will still result in sysselfselfself. sys.p<Tab> # This will result in the correct list of `sys` members beginning with `p`
但是,“上下文”设置将无法在我自己的模块上运行:
new_new_app = main.a<Tab> # Will say at the bottom: Omni completion (^O^N^P) Pattern not found
问题
我应该如何设置omnicompletion和SuperTab,使其像标准库模块一样对我自己的模块运行?以及消除自我.烦恼?
正如你所指出的,这是由snipmate:
https://github.com/garbas/vim-snipmate/issues/65造成的
原文链接:https://www.f2er.com/bash/383909.html我也提出了一个解决方案:
https://github.com/garbas/vim-snipmate/pull/84
它没有被接受,因为snipmate不应该是上下文敏感的.
有两个解决方案:
拿我的狙击叉:
https://github.com/davidhalter/vim-snipmate
这可能不是最好的主意,因为它只是我的叉,我不会主动维护它.
>叉https://github.com/honza/snipmate-snippets并删除点的映射(使用点将不再可能,完成自我).