Короче говоря, я ищу работающую функцию автозаполнения для редактора Vim. Ранее я утверждал, что Vim полностью заменяет IDE в Linux, и, хотя это, безусловно, правда, в ней отсутствует одна важная функция: автозаполнение.
Я знаю , о Ctrl+ N, интеграции Буйный Ctags , Taglist , cppcomplete и OmniCppComplete . Увы, ни один из них не подходит под мое описание «рабочего автозаполнения»:
- Ctrl+N работает хорошо (только), если вы забыли, как пишется
class
, илиwhile
. Ну что ж. - Ctags дает вам зачатки, но имеет много недостатков.
- Taglist - это просто оболочка Ctags и, как таковая, наследует большинство своих недостатков (хотя он хорошо работает для объявлений объявлений).
- cppcomplete просто не работает, как было обещано, и я не могу понять, что я сделал неправильно, или если он «работает» правильно, и ограничения заложены в дизайн.
- OmniCppComplete, похоже, имеет те же проблемы, что и cppcomplete, то есть автозаполнение не работает должным образом. Кроме того,
tags
файл еще раз необходимо обновить вручную.
Я осознаю тот факт, что даже современные, полноценные интегрированные среды разработки не предлагают хорошего завершения кода C ++. Вот почему я принял недостаток Вима в этой области до сих пор. Но я думаю, что фундаментальный уровень завершения кода не слишком сложен, и фактически необходим для продуктивного использования. Поэтому я ищу что-то, что может сделать по крайней мере следующие вещи.
Синтаксическая осведомленность . cppcomplete обещает (но не выполняет для меня) правильное автоматическое завершение с учетом области действия следующего:
variableName.abc variableName->abc typeName::abc
И действительно, все остальное совершенно бесполезно.
Конфигурируемость . Мне нужно указать (легко), где находятся исходные файлы и, следовательно, откуда скрипт получает информацию об автозаполнении. На самом деле, у меня в каталоге есть Makefile, в котором указаны необходимые пути включения. Eclipse может интерпретировать найденную в нем информацию, а почему не сценарий Vim?
Актуальность . Как только я что-то изменю в своем файле, я хочу, чтобы автозаполнение отражало это. Я не хочу, чтобы вручную вызвать
ctags
(или что-то сопоставимое). Кроме того, изменения должны быть постепенными , то есть, когда я изменил только один файл, это совершенно недопустимо дляctags
повторного анализа всего дерева каталогов (которое может быть огромным).
Я что-нибудь забыл? Не стесняйтесь обновлять.
У меня достаточно много настроек и / или настроек, но я не хочу программировать решение с нуля, и я не очень хорошо отлаживаю скрипты Vim.
И последнее замечание: мне бы очень хотелось что-то похожее для Java и C #, но я думаю, что на это слишком много надежды: ctags
анализируются только файлы кода, и у Java и C # есть огромные, предварительно скомпилированные фреймворки, которые нужно будет проиндексировать. К сожалению, разработка .NET без IDE - это даже больше PITA, чем C ++.
clang_complete
является технически наиболее надежным, но запредельно медленным из-за отсутствия кэширования результатов и частичной компиляции. Я должен признать, что я не пробовал все ответы, потому что некоторые требуют сложной, трудоемкой настройки. Я задержу дыхание на предмет пригодного для использования плагина теперь, когда clang, наконец, позволяет разработчикам создавать AST из источников C ++ (до сих пор не было хороших бесплатных анализаторов для C ++).
clang_complete
недавно? Его можно использовать libclang
с кэшированием сейчас и, следовательно, должно быть быстрее.
formatted like this
.)
sh
(значит, это в моей библиотеке) и сопровождаются сокращением моего класса. НапримерshP
дляParser
класса. Тогда все, что вам нужно сделать, это написатьshP
и нажать CTRL + p (или CTRL + n, если хотите) и получить членов класса от последнего использования до первого (или от первого до последнего, если CTRL + n)