Подтвердить что ты не робот

Автозаполнение Python на экземплярах объектов в VIM

Я обнаружил странное поведение в VIM, когда я пытаюсь использовать автозаполнение объектов:

Если я создаю объекты на уровне модуля, автозаполнение VIM будет работать над экземпляром, который я создаю:

working completion

Если я попробую сделать то же самое, когда в функции или классе он больше не работает:

non working completion

Кто-нибудь знает, как это исправить, или нет способа заставить omnicompletion работать с экземплярами в немодульной области?

4b9b3361

Ответ 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>