В двух словах, я ищу работающую функцию автозаполнения для редактора 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 ++.