Короче говоря, я ищу работающую функцию автозаполнения для редактора 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 ++.
источник
sh
(значит, это в моей библиотеке) и сопровождаются сокращением моего класса. НапримерshP
дляParser
класса. Тогда все, что вам нужно сделать, это написатьshP
и нажать CTRL + p (или CTRL + n, если хотите) и получить членов класса от последнего использования до первого (или от первого до последнего, если CTRL + n)clang_complete
является технически наиболее надежным, но запредельно медленным из-за отсутствия кэширования результатов и частичной компиляции. Я должен признать, что я не пробовал все ответы, потому что некоторые требуют сложной, трудоемкой настройки. Я задержу дыхание на предмет пригодного для использования плагина теперь, когда clang, наконец, позволяет разработчикам создавать AST из источников C ++ (до сих пор не было хороших бесплатных анализаторов для C ++).clang_complete
недавно? Его можно использоватьlibclang
с кэшированием сейчас и, следовательно, должно быть быстрее.formatted like this
.)Ответы:
Попробуйте YouCompleteMe . Он использует Clang через интерфейс libclang, предлагая семантическое завершение C / C ++ / Objective-C. Это очень похоже на clang_complete, но существенно быстрее и с нечетким соответствием.
В дополнение к вышесказанному, YCM также обеспечивает семантическое завершение для C #, Python, Go, TypeScript и т. Д. Оно также обеспечивает несемантическое завершение на основе идентификаторов для языков, для которых у него нет семантической поддержки.
источник
Также есть clang_complete, который использует
clang
компилятор для обеспечения завершения кода для проектов C ++. Есть еще один вопрос с советами по устранению неполадок для этого плагина.Плагин, кажется, работает довольно хорошо, пока проект компилируется, но он слишком медленный для больших проектов (так как он пытается выполнить полную компиляцию для генерации списка тегов).
источник
clang_complete
Плагин хорошо работает на Cygwin и Windows. Ничего не могу сказать о больших проектах, потому что у меня их нет. :)согласно запросу, вот комментарий, который я дал ранее:
Посмотри на это:
эта ссылка должна помочь вам, если вы хотите использовать monodevelop на MacOSX
Удачи и счастливого кодирования.
источник
Я только что нашел проект Eclim, связанный с другим вопросом . Это выглядит довольно многообещающе, по крайней мере, для интеграции с Java.
источник
Я немного опоздал на вечеринку , но autocomplpop может быть полезным.
источник
это то, что вы ищете что-то вроде intellisense?
Insesvim, кажется, решает проблему.
ссылка на скриншоты здесь
источник
Кто-то упомянул code_complete?
Но вам не понравились ctags, так что это, вероятно, не то, что вы ищете ...
источник