在我的.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命令,为我的TAGS
个文件生成.py
个文件
find . -name '*.py' -type f -print0 | xargs -0 etags -l python
例如,我有一个main.py
,其中包含一个对象app
,以便以下脚本正常工作:
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>
我得到了a..
个对象的完整列表,其中包含那些不属于模块main
的对象。
如果我在.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`
但"context"
设置不适用于我自己的模块:
new_new_app = main.a<Tab>
# Will say at the bottom: Omni completion (^O^N^P) Pattern not found
我应该如何设置omnicompletion和SuperTab,使其对于我自己的模块和标准库模块一样?除了消除selfselfself.
烦恼?
答案 0 :(得分:5)
正如您所指出的,这是由snipmate引起的:https://github.com/garbas/vim-snipmate/issues/65
我还提出了一个解决方案: https://github.com/garbas/vim-snipmate/pull/84
它没有被接受,因为snipmate不应该是上下文敏感的。
有两种解决方案:
拿我的snipmate fork:
https://github.com/davidhalter/vim-snipmate
这可能不是最好的主意,因为它只是我的分叉而且我没有积极维护它。
Fork https://github.com/honza/snipmate-snippets并删除点的映射(不再使用点,完成自我)。