В двух словах, я ищу функцию 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, чем С++.