Как получить автоматическое предложение параметров массива при вводе в Vim? - PullRequest
11 голосов
/ 18 июня 2011

enter image description here

Допустим, я набираю

a = [1, 2]

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

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

enter image description here

Ответы [ 2 ]

7 голосов
/ 18 июня 2011

Последние версии vim поставляются со скриптом omnicompletion, который называется 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
3 голосов
/ 18 июня 2011

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

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

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

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

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

x = "a string"

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

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

Для получения дополнительной информации:

:help omnifunc
...