Как получить автоматические предложения по параметрам массива при вводе в 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