Автозаполнение в Vim - PullRequest
244 голосов
/ 12 июля 2009

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

Я знаю о Ctrl + N , Интеграция Exuberant 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 - это даже больше PITA, чем C ++.

Ответы [ 7 ]

162 голосов
/ 08 февраля 2013

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

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

35 голосов
/ 21 апреля 2011

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

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

7 голосов
/ 13 июля 2009

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

посмотрите на это:

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

Удачи и удачного кодирования.

5 голосов
/ 13 июля 2009

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

3 голосов
/ 21 апреля 2011

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

2 голосов
/ 12 июля 2009

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

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

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

1 голос
/ 21 апреля 2011

Кто-то упоминал code_complete?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...