Есть ли плагин автозаполнения для vim? Какие у меня есть варианты?
В данный момент я использую AutoComplPop , но у него плохая интеграция с snipMate, которую я использую, и очень медленный на файлах Ruby (даже <100 строк).
Я видел пару других плагинов, но они мертвы как минимум больше года. Итак, есть идеи?
vim
autocomplete
naquad
источник
источник
let g:acp_behaviorSnipmateLength=-1
см.:help autocomplpop
), Которые вы должны добавить в свой .vimrc, вы добавили его?Ответы:
Это старый вопрос, но я продолжаю возвращаться к нему время от времени с проблеском угасающей надежды, думая, что однажды я найду правильную комбинацию плагинов, чтобы дать мне идеальное автозаполнение в 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-подобным языкам, и в противном случае он ожидает, что любые специфичные для языка функции будут добавлены пользователями в качестве плагинов. К сожалению, это привело к раздробленной экосистеме автозаполнения. Некоторые варианты являются приличными, но нет ничего идеального, и редко встречается лидер большинства / лучшая практика.
источник
Вот хороший: YouCompleteMe
YouCompleteMe, который заставляет раскрывающееся меню автоматически появляться при вводе, и он поддерживает нечеткий выбор, поэтому, если у вас есть вызываемый идентификатор,
partition_finder
и вы вводите что-то наподобиеptf
во время редактирования файла C ++, раскрывающийся список предложений будет включать и то,printf
и другое,partition_finder
так как они содержат одинаковые буквы в том же порядке. Если у вас есть переменная с именемmyBrain
, вы можете напечатать,brn
и она предложит это. YouCompleteMe также расставляет приоритеты для предложений, основываясь на предыдущей частоте использования.источник
Я использую neocomplcache с фрагментами snipmate + snipmate
ты можешь видеть мой vimrc
источник
Я пробую necomplecache с neosnippet. Я предполагаю, что он будет лучше интегрирован, так как оба написаны одним и тем же человеком.
источник
Я считаю, что у vim есть одна встроенная система под названием OmniComplete. В режиме вставки используйте
ctrl+x,ctrl+o
.В противном случае вы можете выполнить завершение ключевых слов из режима вставки с помощью
ctrl+n
. Когда вы вызываете его, вы увидите раскрывающийся список возможных совпадений слов, найденных в редактируемом вами файле, а также в других открытых вами файлах. Продолжайте нажимать,ctrl+n
чтобы переключаться между вариантами. Когда вы найдете нужное слово, просто продолжайте печатать как обычно.Если вы не можете найти нужное слово, в
ctrl+n
конечном итоге вычеркните его из списка, и вы сможете продолжать печатать, или вы можете нажать,ESC
а затемbcw
перейтиb
к началу слова оскорбления иc
передатьw
орд тому, который вы хотели.источник
<c-x><c-o>
Работает только для вещей, которые vim явно сказали, как поддерживать. По умолчанию я думаю, что он может сделать только пару незначительных вещей, и прочее как завершение CSS, но если вы хотите что-то вроде Eclipse, есть пара плагинов vim, которые пытаются предоставить вам этоpartition_finder
и я что-ptf
то напишу во время редактирования файла C ++, выпадающее меню предложитprintf
иpartition_finder
потому что они содержат одинаковые буквы в одинаковом порядке. Если у меня есть переменная с именемmyBrain
, я могу напечатать,brn
и она появится. YouCompleteMe также расставляет приоритеты для предложений, основываясь на предыдущей частоте использования. Проверьте это здесь: valloric.github.io/YouCompleteMeЯ создал новый плагин SimpleAutoComplPop из оригинального AutoComplPop. Хотя я не знаком с ruby или snipMate, вы можете попробовать, и я рад получить отзывы :)
источник