Настройка
В моем .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
, так что следующий script отлично работает:
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.
?