Автозаполнение в Vim

В двух словах, я ищу функцию work автозаполнения для редактора Vim. Я обсуждал до, что Vim полностью заменяет IDE под Linux, и, хотя это, безусловно, так, не хватает одной важной функции: autocompletion.

Я знаю о Ctrl + N, Интеграция Exuberant Ctags, Taglist, cppcomplete и OmniCppComplete. Увы, ни одно из них не соответствует моему описанию "рабочей автозавершения:"

  • Ctrl + N работает красиво (только), если вы забыли, как записать class, или while. О, хорошо.
  • Ctags дает вам рудименты, но имеет много недостатков.
  • Taglist - это всего лишь оболочка Ctags и, как таковая, наследует большинство своих недостатков (хотя она хорошо подходит для объявлений с объявлением).
  • cppcomplete просто не работает, как было обещано, и я не могу понять, что я сделал не так, или если он "работает" правильно, а ограничения - по дизайну.
  • OmniCppComplete, похоже, имеет те же проблемы, что и cppcomplete, т.е. автозаполнение не работает должным образом. Кроме того, файл tags снова необходимо обновить вручную.

Я осознаю тот факт, что даже современные, полномасштабные IDE не предлагают хорошего кода на С++. Вот почему я до сих пор не принимал Вима в этой области. Но я думаю, что фундаментальный уровень завершения кода не слишком много, чтобы спросить, и на самом деле требуется для продуктивного использования. Поэтому я ищу что-то, что может выполнить по крайней мере следующие вещи.

  • Знание синтаксиса. cppcomplete promises (но не доставляет для меня), правильное, автоматическое завершение с учетом области видимости:

    variableName.abc
    variableName->abc
    typeName::abc
    

    И действительно, все остальное совершенно бесполезно.

  • Конфигурируемость. Мне нужно указать (легко), где находятся исходные файлы, и, следовательно, где script получает информацию о своем автозаполнении. Фактически, у меня есть Makefile в моем каталоге, который указывает необходимые пути include. Eclipse может интерпретировать найденную в нем информацию, почему бы и Vim script?

  • Up-к-Современность. Как только я что-то изменил в своем файле, я хочу, чтобы автозаполнение отражало это. Я не хочу вручную запускать ctags (или что-то подобное). Кроме того, изменения должны быть инкрементальными, т.е. Когда я изменил только один файл, он совершенно неприемлем для ctags для повторного анализа всего дерева каталогов (что может быть огромным).

Я что-то забыл? Не стесняйтесь обновлять.

Мне нравится довольно много настроек и/или мастеринга, но я не хочу программировать решение с нуля, и я не умею отлаживать скрипты Vim.

Последнее замечание, мне бы очень понравилось что-то подобное для Java и С#, но я думаю, что слишком много надеяться на: ctags обрабатывает только файлы кода, а на Java и С# - огромные, предварительно скомпилированные фреймворки, которые должны быть индексируются. К сожалению, разработка .NET без IDE - это еще больше PITA, чем С++.

Ответ 1

Попробуйте YouCompleteMe. Он использует Clang через интерфейс libclang, предлагая семантическое завершение C/C++/Objective-C. Это очень похоже на clang_complete, но существенно быстрее и с нечетким соответствием.

В дополнение к вышесказанному, YCM также обеспечивает семантическое завершение для С#, Python, Go, TypeScript и т.д. Он также обеспечивает несемантическое завершение на основе идентификаторов для языков, для которых у него нет семантической поддержки.

Ответ 2

Theres также clang_complete, который использует clang компилятор, чтобы обеспечить завершение кода для проектов на С++. Еще один вопрос с подсказками устранения неполадок для этого плагина.

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

Ответ 3

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

взгляните на это:

эта ссылка должна помочь вам, если вы хотите использовать monodevelop на MacOSX

Удачи и счастливого кодирования.

Ответ 4

Я только что нашел проект Eclim, связанный в другой вопрос. Это выглядит довольно многообещающим, по крайней мере, для интеграции с Java.

Ответ 5

Я немного опаздываю на вечеринку, но autocomplpop может оказаться полезным.

Ответ 6

это то, что вы ищете что-то вроде intellisense?

insevim, похоже, решает проблему.

ссылка на скриншоты здесь