配置
在我的.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
的文件,在其中有一个名为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>
我得到了一个完整的列表,其中包括那些不属于主模块main
的a..
对象。
我的期望
如果我在.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.
的烦恼?
<C-x> <C-o>
,<C-x> <C-]>
,<C-x> <C-u>
结果如何?另外,你使用的是哪个Python完成脚本? - romainl