Как получить автоматические предложения по параметрам массива при вводе в Vim?

enter image description here

Скажем, я набираю

a = [1, 2]

в файле .py в vim и когда я набираю "a". и нажмите TAB, я хотел бы получить меню предложений, которое связано с списками.

Изменить 1 в ответ на комментарий Робин: Я думаю, что это возможно в vim, потому что есть плагин, который проверяет, является ли данный код python допустимым кодом (я не знаю, что называется плагином). Посмотрите:

enter image description here

Ответ 1

Последние версии vim поставляются с omnicompletion script, называемым pythoncomplete.

Откройте файл python и введите

:set completefunc?

чтобы проверить, что такое текущая функция завершения. Если вы вернетесь

completefunc=

то функция завершения не устанавливается. Вы можете установить pythoncomplete как функцию завершения, набрав

:set completefunc=pythoncomplete#Complete

и вы можете установить это значение по умолчанию для файлов python, используя (в вашем vimrc)

autocmd FileType python set completefunc=pythoncomplete#Complete

Теперь, когда вы находитесь в vim, вы можете использовать omnicomplete, используя Ctrl+X Ctrl+O, и вы должны получить всплывающее меню, как показано ниже:

list completion

Вы также можете привязать это к ключу вкладки в режиме вставки с помощью (в вашем vimrc):

inoremap <Tab> <C-x><C-o>

Чтобы узнать больше о взаимодействии с выпадающим меню, нажмите

:help ins-completion

Ответ 2

Прочитайте одно из многих сообщений в блоге о настройке Vim в качестве среды разработки на Python. Здесь один, чтобы вы начали. В частности, вас интересует функция OmniComplete.

По умолчанию это связано с нажатием клавиши Ctrl-x Ctrl-o, но вы можете переподтвердить его клавише табуляции.

Обратите внимание, что он не чувствителен к типу переменной. Он может заполнить для вас, если вы наберете:

string.<ctl-x><ctl-o>

вы получите список методов строковых объектов. Но если вы сделаете так, как вы описали в своем вопросе что-то вроде:

x = "a string"

x.<ctl-x><ctl-o>

vim не будет знать, что переменная x содержит строку и не сможет предоставить список методов.

Информация о omnicomplete:

:help omnifunc