Автодополнение в Vim

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

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

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

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

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

    variableName.abc
    variableName->abc
    typeName::abc
    

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

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

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

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

мне комфортно с довольно большим количеством конфигурации и / или возиться, но я не хочу программировать решение с нуля, и я не хорош в отладке скриптов Vim.

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

7 ответов


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

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


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

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


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

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

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

удачи и счастливого кодинга.


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


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


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

insevim кажется, решает проблему.

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


кто-нибудь упоминал code_complete?

но вам не понравились ctags, так что это, вероятно, не то, что вы ищете...