Это старый вопрос, но я время от времени возвращаюсь к нему с проблеском угасающей надежды, думая, что однажды я найду правильную комбинацию плагинов, чтобы дать мне идеальное автозаполнение в Vim. Поиски продолжаются, но это все исследования, которые я проводил в течение нескольких лет.
Прежде всего, вы должны понимать, что Vim - это текстовый редактор, а не редактор кода. Редакторы кода, IDES, такие инструменты, как набор инструментов Jetbrains, код Visual Studio, Eclipse и т.д.
Vim принципиально не может точно "автозаполнить" код. Автозаполнение требует анализа исходного кода и анализа AST. Учтите, что Vim не мог выполнять асинхронные операции, пока Vim 8 не был выпущен в 2016 году, поэтому попытка запустить любое программное обеспечение для интроспекции кода в плагине Vim было бы кошмаром. Это запечатлено в истории экосистемы Vim, чтобы этого не делать. И все те, кто пытается это сделать, как Tern For Vim, действительно кошмары в использовании.
Лучшее, что может сделать текстовый редактор - это отрывки и заполнение теми же словами / строками / и т.д., О которых он знает. Если вы ищете автозаполнение кода, вы должны использовать редактор кода, а не текстовый редактор.
Это ваши варианты, из которых я попробовал все:
Два полезных сочетания клавиш:Ctrl- n, который автоматически заполняет слово, основываясь только на текущих открытых вами буферах (без самоанализа кода), и Ctrl- x Ctrl- l, который автоматически завершает полную строку кода, если вы хотите дублируй один. Вы, вероятно, знаете Ctrl - x Ctrl - f, который автоматически заполняет имя файла, включая путь, относительно текущего :pwd
. Плагин полного шаблона может быть немного полезен, если вы не выполняете поиск с помощью /\v
.
Встроенный в Vim « Omnicompletion » запускается с помощью Ctrl- x, Ctrl- o (это то, что авторы Vim хотят, чтобы вы печатали каждый раз) вместе с набором языковых плагинов, если они существуют. Вы можете :echo &omnifunc
в файле, чтобы увидеть, есть ли у вас уже настроенное Omnicompletion Vim в выбранном вами файле.
AutoComplPop для автоматического открытия вышеуказанного меню Omnicompletion при наборе текста.
SuperTab, который позволяет вам нажимать клавишу Tab, чтобы запустить встроенную Vim.
NeoComplCache, который является завершением ключевого слова (не отличается от встроенного завершения Vim, не указан), сложной настройкой .vimrc
и NeoSnippet для завершения фрагмента.
Чудовищная комбинация exuberant-ctags
и DoctorJS
(проект Mozilla, который был мертв в течение года), TagBar и доморощенная вещь для извлечения завершений из файлов тегов.
SnipMate, базовый плагин для дополнения тегов, а также фрагменты, и вы сами поймете, как добавлять фрагменты, так как это немного сложно.
UltiSnips вместе с UltiSnips-Snippets, которые отличаются от вышеупомянутых фрагментов.
Крачка для Vim, многообещающая библиотека, которая выполняет самоанализ кода для получения правильного автозаполнения. Однако он глючит, очень медленный, имеет утечки памяти, которые приводят к сбою Vim, и, возможно, является заброшенным.
YouCompleteMe, нечеткое завершение по типу, которое запускает сервер в фоновом режиме, наряду с домашней функцией для завершения фрагмента.
Eclim - благородная попытка запустить сервер Eclipse в фоновом режиме и сообщить Vim об автозаполнениях, которые он анализирует на лету. Это работает примерно так же, как крачка.
Наконец, Closetag или delimitMate или AutoClose или доморощенный bananagram для автоматического закрытия тегов и скобки автоматически при вводе.
Почти каждый плагин в этом списке будет конфликтовать почти с каждым другим плагином в этом списке.
YouCompleteMe, похоже, является лидером пакета, но мне никогда не удавалось заставить его работать должным образом с завершением тегов, а его завершение кода-интроспекцией еще не доказало свою эффективность.
Мое личное мнение таково, что текущее состояние мира автозаполнения Vim находится в плохом состоянии. Для небольших проектов вам может пригодиться одно из указанных выше решений. Если вы имеете дело с простым API-интерфейсом, который вы можете держать главным образом в своей голове, завершение без интроспекции кода, вероятно, будет в порядке. Если вы работаете с большим проектом или вам нужна безопасность типов при программировании, полноценная IDE (Eclipse, Visual Studio, WebStorm) подойдет вам гораздо лучше, чем Vim.
Недостатком IDE, конечно же, является то, что у вас больше не будет силы Vim. Я не использовал ни одной IDE с приемлемым режимом Vim.
Vim имеет умеренный языковой уклон к нетипизированным C-подобным языкам, и в противном случае он ожидает, что любые специфичные для языка функции будут добавлены пользователями в качестве плагинов. К сожалению, это привело к расщепленной экосистеме автозаполнения. Некоторые варианты достойны, но нет ничего идеального, и редко встречается лидер большинства / лучшая практика.