Vim 为什么我按下<;时SuperTab会自动输出;选项卡>;? 设置

Vim 为什么我按下<;时SuperTab会自动输出;选项卡>;? 设置,vim,autocomplete,tags,code-completion,supertab,Vim,Autocomplete,Tags,Code Completion,Supertab,在my.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 =

在my
.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
在我一直工作的工作目录中,我执行了下面的bash命令,为我所有的
.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>
如果我多次按Tab键:

new_new_app = mainselfselfselfself.
什么对我有用 但是,如果我执行以下操作:

new_new_app = main.a<Tab>
然后,我使用标准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`
问题
我应该如何设置omnicompletion和SuperTab,使其在我自己的模块中的行为与在标准库模块中的行为相同?正如您所指出的,这是由snipmate引起的,并且消除了
自身。
烦恼?

我还提出了一个解决方案:

它没有被接受,因为snipmate不应该是上下文敏感的

有两种解决方案:

  • 拿我的狙击叉来说:

    这可能不是最好的主意,因为它只是我的叉子,我不会主动维护它

  • 分叉并移除点的映射(不再可能使用点来完成自我)


  • 我可能错了,但我认为SuperTab做了其他类似插件所做的事情:他们尝试猜测上下文并调用正确的内置omni completion来提出最准确的结果。您是否尝试过不使用SuperTab的omni completion<代码>,
    结果是什么?还有,你用的是什么Pyton completetion脚本?@romainl,是的,你提到的关键序列都是正确的。我认为这是由一个SnipMate bug引起的。试着恢复到原来的SnipMate。谢谢你的回答!我刚刚克隆了你的叉子,还发现了你和其他人在Snipmate的新叉子上所做的所有很酷的工作!杰出的
    new_new_app = main.a<Tab>
    
    let g:SuperTabDefaultCompletionType="context"
    
    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