Можно ли использовать vim для автозаполнения имен функций, переменных и т. Д. При его использовании для программирования?


56

Многие IDE автоматически заполняют имена функций, переменные, имена методов и т. Д. В качестве пользовательских типов. Лучшие из них дополняют имена, основываясь как на встроенной библиотеке языка, так и на том, что уже было определено в других файлах той же программы.

Например, когда я набираю следующую программу на Python:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

строка eatFбудет автоматически отображаться eatFood()как доступная опция автозаполнения.

Есть ли у Vim такая возможность? Если так, как я могу включить это?

Ответы:


42

В vim есть много разных вариантов автозаполнения. Одним из способов может быть использование SuperTab . Это дает возможность использовать табуляцию более или менее в любое время. Это позволит вам нажать Tabпосле частичного ввода слова, чтобы получить список завершения. Например, введите, eatFа затем TabразвернутьeatFood.

Пожалуйста, обратите внимание : эти картинки все ссылки на примеры GIF в действии.

супертаблицы

У Vim есть отличные другие варианты. Вы должны прочитать, :h ins-completionчтобы увидеть множество встроенных вариантов завершения. Использование vim's Ctrl- XCtrl- в Oсочетании с плагином с поддержкой Python, таким как jedi, может дать завершающий вкус. Джедаев можно настроить для предоставления документации по омни-завершению (это то, что Ctrl- XCtrl- Oделает). Тогда документация для кандидатов на прохождение появится в разделенном окне.

завершение ctrlxctrlo

Использование похожих плагинов, но разных опций приводит к разного рода поведениям. Например, возможно, не нужно запрашивать автозаполнение (если это то, что вам нужно). Вместо этого после того, как вы наберете некоторое количество букв (скажем, 2 или 3) слова, плагин может попытаться разумно предложить возможные дополнения в меню.

введите описание изображения здесь

Таким образом, короткий ответ - да! Но процесс настройки может быть немного сложным. Я думаю об этом как о шаге по длинной лестнице освоения vim.


Я перепробовал их все и всегда возвращаюсь в SuperTab, это наименее навязчиво.
Craigp

1
Мне также очень нравится плагин YouCompleteMe, так как он предлагает, как вы печатаете, и вы можете выбирать или игнорировать предложения. Да, визуально это трудно игнорировать, но это очень ненавязчиво в моем рабочем процессе, потому что требует меньше нажатий клавиш.
процветает

3
Я изменил анимацию так, чтобы она была «на клике», в том смысле, что она связана с анимацией GIF.
Давидловрыдуда

1
Я не могу использовать YouCompleteMe на своем рабочем компьютере, потому что у меня нет root для установки зависимостей, SuperTab - безусловно, лучший выбор.
Чарльз Клейтон

@mixedmath В моем случае superTab не работает.
Алхелал

24

Такая функциональность - то есть поиск текущего файла (и всех открытых файлов) для автозаполнения, должен быть включен по умолчанию с помощью Ctrl+P:

снимок экрана автозаполнения в использовании

Вы можете перейти к н доб внушения с Ctrl+N, в р revious предложение с Ctrl+Pи выбрать его, введя любую букву (который будет добавляться сразу после внушения).


1
Редактору (Джаспер): Скорее всего, я хочу снова написать что-то, что я написал недавно, а не то, что я напишу в будущем, или это будет в начале файла. Поэтому ^Pболее естественно ИМХО. В противном случае спасибо за редактирование (надеюсь, я нажал правую кнопку, и вы получили +2).
лет»

1
Да, я получил эти воображаемые интернет-очки :) Я всегда думал, что список предложений будет отсортирован в алфавитном порядке ...
Джаспер

@ Порядок появления Джаспера это (по крайней мере, для меня, конечно, также см. Выше: world,word,woodи не наоборот). Так же ^Pкак и последнее использованное завершение, что очень удобно (я редко иду дальше 3 пунктов в списке, даже в длинном файле).
лет»

protip:inoremap <C-Space> <C-N>
wchargin

20

Vim имеет встроенную поддержку для завершения. Вы можете прочитать о различных дополнениях, которые поддерживает Vim :h ins-completion.

В общем, для всех целей, которые я нашел, достаточно дополнений по своему вкусу, однако есть некоторые плагины завершения, которые добавляют больше ценности, чем предлагают дополнения. NeoComplete , YCM (YouCompleteMe) несколько для того же. Они более продвинуты в том смысле, что они пытаются более точно комбинировать различные типы дополнений, и у них также есть усовершенствованные механизмы кэширования, поэтому они, как правило, работают быстрее. YCM даже доходит до работы с внешними компиляторами / утилитами для обеспечения лучшего IntelliSense.


9

Да, сценарии автозаполнения для vim существуют. «Лучший» выбор зависит от вашего языка программирования. Поскольку ваш пример кода Python, я предлагаю взглянуть на джедая . Создайте поверх этого, что вы завершили меня существует, который также поддерживает другие языки, но иногда рассматривается как слишком большой. Для других языков вы можете просмотреть длинный набор скриптов vim .


7

В режиме вставки введите первые пару символов слова, затем нажмите:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Это особенно полезно при вводе имен переменных в программе.

Опция 'complete' определяет, где будут выполняться поиск по ключевым словам (включая файлы, файлы тегов, буферы и т. Д.).

Опция 'completeopt' контролирует, как происходит завершение (например, отображается ли меню).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.