9

Есть ли плагин автозаполнения для vim? Какие у меня есть варианты?

На данный момент я использую AutoComplPop, но у него плохая интеграция с snipMate, которую я использую, и очень медленно на файлах Ruby (даже <100 строк).

Я видел пару других плагинов, но они мертвы, по крайней мере, больше года. Итак, есть идеи?

6 ответов6

12

Это старый вопрос, но я время от времени возвращаюсь к нему с проблеском угасающей надежды, думая, что однажды я найду правильную комбинацию плагинов, чтобы дать мне идеальное автозаполнение в 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-подобным языкам, и в противном случае он ожидает, что любые специфичные для языка функции будут добавлены пользователями в качестве плагинов. К сожалению, это привело к расщепленной экосистеме автозаполнения. Некоторые варианты достойны, но нет ничего идеального, и редко встречается лидер большинства / лучшая практика.

6

Вот хороший: YouCompleteMe

YouCompleteMe, который заставляет раскрывающееся меню автоматически появляться при вводе, и он поддерживает нечеткий выбор, поэтому если у вас есть идентификатор с именем partition_finder и вы вводите что-то вроде ptf при редактировании файла C++, выпадающий список предложений будет включать в себя и printf и partition_finder потому что содержат одинаковые буквы в том же порядке. Если у вас есть переменная myBrain , вы можете ввести brn и она предложит это. YouCompleteMe также расставляет приоритеты для предложений, основываясь на предыдущей частоте использования.

2

Я пытаюсь necomplecache с neosnippet. Я предполагаю, что он будет лучше интегрирован, так как оба написаны одним и тем же человеком.

2

Я использую neocomplcache с фрагментами snipmate + snipmate

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

ты можешь видеть мой vimrc

1

Я считаю, что у vim есть одна встроенная система под названием OmniComplete. В режиме вставки используйте ctrl+x,ctrl+o

В противном случае вы можете выполнить завершение ключевых слов из режима вставки с помощью ctrl+n Когда вы вызываете его, вы увидите раскрывающийся список возможных совпадений слов, найденных в редактируемом вами файле, а также из других открытых вами файлов. Продолжайте нажимать ctrl+n чтобы переключаться между вариантами. Когда вы подойдете к нужному слову, просто продолжайте печатать как обычно.

Если вы не можете найти слово , которое вы хотите, ctrl+n в конечном итоге цикл из списка , и вы можете продолжать печатать, или вы можете нажать клавишу ESC , а затем bcw пойти b ACK к началу нарушившего слова и c висящего w к тому, кого вы хотели.

1

Я создал новый плагин SimpleAutoComplPop из оригинальной AutoComplPop. Хотя я не знаком с ruby или snipMate, вы можете попробовать, и я рад получить отзывы :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .