Автозаполнение Python на экземплярах объектов в VIM
Я обнаружил странное поведение в VIM, когда я пытаюсь использовать автозаполнение объектов:
Если я создаю объекты на уровне модуля, автозаполнение VIM будет работать над экземпляром, который я создаю:
![working completion]()
Если я попробую сделать то же самое, когда в функции или классе он больше не работает:
![non working completion]()
Кто-нибудь знает, как это исправить, или нет способа заставить omnicompletion работать с экземплярами в немодульной области?
Ответы
Ответ 1
Даже если он не использует плагин Vim omnicompletion, используя веревку, ropemode и ropevim, можно получить автозаполнение в методах:
![enter image description here]()
Даже если не совсем то, что я хотел, он работает очень хорошо.
Я работал так:
Я установил дистрибутив ropevim из здесь и добавил следующие строки в мой файл .vimrc:
" Rope AutoComplete
let ropevim_vim_completion = 1
let ropevim_extended_complete = 1
let g:ropevim_autoimport_modules = ["os.*","traceback","django.*", "xml.etree"]
imap <c-space> <C-R>=RopeCodeAssistInsertMode()<CR>
Теперь нажатие Ctrl + Space откроет меню завершения каната.
Ответ 2
Мне пришлось использовать следующую строку, чтобы получить ctrl + пространство, работающее
imap <Nul> <C-R>=RopeCodeAssistInsertMode()<CR>
Ответ 3
Расширение ответа @BergmannF. Если вы не хотите, чтобы rope completion
выбирал первую запись, просто добавьте <C-P>
(перейти к предыдущей записи → нет записи) в команду imap
:
imap <C-Space> <C-R>=RopeCodeAssistInsertMode()<CR><C-P>