Это старый вопрос, но я продолжаю возвращаться к нему время от времени с проблеском угасающей надежды, думая, что однажды я найду правильную комбинацию плагинов, чтобы дать мне идеальное автозаполнение в Vim. Поиски продолжаются, но это все исследования, которые я проводил в течение нескольких лет.
Прежде всего, вы должны понимать, что Vim - это текстовый редактор, а не редактор кода. Редакторы кода, IDES, такие инструменты, как набор инструментов Jetbrains, код Visual Studio, Eclipse и т. Д.
Vim принципиально не может точно «автозаполнить» код. Автозаполнение требует анализа исходного кода и анализа AST. Учтите, что Vim не мог выполнять асинхронные операции, пока Vim 8 не был выпущен в 2016 году, поэтому попытка запустить любое программное обеспечение для интроспекции кода в плагине Vim было бы кошмаром. Это запечатлено в истории экосистемы Vim, чтобы этого не делать. И все те, кто пытается это сделать, как Tern For Vim, действительно кошмары в использовании.
Лучшее, что может сделать текстовый редактор - это отрывки и заполнение теми же словами / строками / и т. Д., О которых он знает. Если вы ищете автозаполнение кода, вы должны использовать редактор кода, а не текстовый редактор.
Это ваши варианты, из которых я попробовал все:
Два полезных сочетания клавиш: Ctrl- n, которые автоматически заполняют слово, основываясь только на текущих открытых вами буферах (без самоанализа кода), и Ctrl- xCtrl-, lкоторые автоматически заполняют полную строку кода, если вы хотите дублировать один. Вы, вероятно, знаете Ctrl- xCtrl- f, который будет автоматически заполнять имя файла, включая путь, относительно текущего :pwd
. Модель-полный модуль может быть слегка полезно , если вы не ищите с /\v
.
Встроенный в Vim « Omnicompletion » запускается Ctrl- x, Ctrl- o(это то, что авторы Vim хотят, чтобы вы печатали каждый раз) вместе с набором языковых плагинов, если они существуют. Вы можете :echo &omnifunc
в файле посмотреть, настроена ли Vim 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-подобным языкам, и в противном случае он ожидает, что любые специфичные для языка функции будут добавлены пользователями в качестве плагинов. К сожалению, это привело к раздробленной экосистеме автозаполнения. Некоторые варианты являются приличными, но нет ничего идеального, и редко встречается лидер большинства / лучшая практика.
let g:acp_behaviorSnipmateLength=-1
см.:help autocomplpop
), Которые вы должны добавить в свой .vimrc, вы добавили его?