Вопрос по autocomplete, c++, vim, ide – Автозаполнение в Vim

243

Короче говоря, я ищуworking функция автозаполнения для редактора Vim. Я & APOS; веутверждал раньше что Vim полностью заменяет IDE под Linux, и, хотя это, безусловно, верно, в нем отсутствует одна важная функция: автозаполнение.

Я знаю оCtrl+N, Интеграция Exuberant Ctags, Taglist, cppcomplete а такжеOmniCppComplete, Увы, ни один из них не подходит под мое описание & # x201C; рабочего автозаполнения: & # x201D;

Ctrl+N works nicely (only) if you've forgotton how to spell class, or while. Oh well. Ctags gives you the rudiments but has a lot of drawbacks. Taglist is just a Ctags wrapper and as such, inherits most of its drawbacks (although it works well for listing declarations). cppcomplete simply doesn't work as promised, and I can't figure out what I did wrong, or if it's “working” correctly and the limitations are by design. OmniCppComplete seems to have the same problems as cppcomplete, i.e. auto-completion doesn't work properly. Additionally, the tags file once again needs to be updated manually.

Мне известно о том факте, что даже современные, полноценные интегрированные среды разработки не обеспечивают хорошего завершения кода C ++. Вот почему я до сих пор принимал недостаток Vim в этой области. Но я думаю, что фундаментальный уровень завершения кода - это не слишком большой вопрос, и он фактически необходим для продуктивного использования. Поэтому я ищу что-то, что может выполнить, по крайней мере, следующие вещи.

Syntax awareness. cppcomplete promises (but doesn't deliver for me), correct, scope-aware auto-completion of the following:

variableName.abc
variableName->abc
typeName::abc

And really, anything else is completely useless.

Configurability. I need to specify (easily) where the source files are, and hence where the script gets its auto-completion information from. In fact, I've got a Makefile in my directory which specifies the required include paths. Eclipse can interpret the information found therein, why not a Vim script as well?

Up-to-dateness. As soon as I change something in my file, I want the auto-completion to reflect this. I do not want to manually trigger ctags (or something comparable). Also, changes should be incremental, i.e. when I've changed just one file it's completely unacceptable for ctags to re-parse the whole directory tree (which may be huge).

Я что-нибудь забыл? Не стесняйтесь обновлять.

Мне удобно с большим количеством настроек и / или манипуляций, но я не хочу программировать решение с нуля, и я не очень хорош в отладке сценариев Vim.

И последнее замечание: мне действительно нравится что-то похожее для Java и C #, но я полагаю, что на это слишком много надежды:ctags только анализирует файлы кода, и у Java и C # есть огромные, предварительно скомпилированные фреймворки, которые нужно будет проиндексировать. К несчастью,разработка .NET без IDE это даже больше PITA, чем C ++.

(Причина отката редактирования: названия продуктов не являются кодами, они не принадлежатformatted like this.) Konrad Rudolph
Ты пыталсяclang_complete относительно недавно? Можно использоватьlibclang с кэшированием сейчас и таким образом должно быть быстрее. Jan Larres
@Jan Спасибо за информацию. Когда я в последний раз пробовал это сделать, поддержка libclang все еще была отрывочной. Я, наверное, должен попробовать еще раз, как только у меня будет время. Konrad Rudolph
@Shahbaz На самом деле я убежден, что на данный момент не существует достаточно хорошего решения.clang_complete является технически наиболее надежным, но чрезмерно медленным из-за отсутствия кэширования результатов и частичной компиляции. Я должен признать, что я не пробовал все ответы, потому что некоторые требуют сложной, трудоемкой настройки. Теперь я задержу дыхание на предмет пригодного для использования плагина, поскольку clang наконец-то позволяет разработчикам создавать AST из источников C ++ (до сих пор не было хороших бесплатных анализаторов для C ++). Konrad Rudolph
Прошло много времени с тех пор, как вы задавали этот вопрос, нашли ли вы, наконец, хороший вопрос? Я спрашиваю, потому что я не вижу принятых ответов. Лично я должен признать, что прибегал к префиксам своих переменных / функций. Например, все они начинаются сsh (имеется в виду в моей библиотеке) и сопровождается аббревиатурой моего класса. НапримерshP заParser учебный класс. Тогда все, что вам нужно сделать, это написатьshP и нажмите CTRL + p (или CTRL + n, если хотите) и получите членов класса от последнего использования до первого (или от первого до последнего, если CTRL + n) Shahbaz

Ваш Ответ

7   ответов
1

http://www.vim.org/scripts/script.php?script_id=1764

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

2

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

ссылка на скриншотыВот

Нильс: Не у всех есть доступ к Visual Studio, также у многих есть навыки работы с vi, которые они хотят применить в среде Windows. Был порт для Linux, но в настоящее время он не работает. В любом случае, чего вы пытаетесь достичь? Вы уверены, что вам просто не нужны функции автозаполнения по умолчанию?linux.org/docs/ldp/howto/C-editing-with-VIM-HOWTO/…
Рик, пожалуйста, оставь свой комментарий в виде двух отдельных ответов, они неоценимы, и я хотел бы почтить их должным образом! Тем не менее, MonoDevelop непригоден для OS X на данный момент, и я в настоящее время изучаю OmniCppComplete. Konrad Rudolph
Лол это только окна! :( Почему вы должны хотеть это в Windows, где у вас есть VS ... Я ищу решение для Linux.
ну, вы можете получить исходный код :), если нет, то единственное, о чем я могу подумать, это omnicompletion .. или взгляните на это:ankitjain.org/blog/2007/06/30/integrating-vim-with-monodevelop для .net вещи по крайней мере ..
Это было бы то, что я ищу, да. К сожалению, он работает только в Windows (я использую OS X). Кроме того, последнее обновление, похоже, было сделано около 2003 года. :-( Konrad Rudolph
3

autocomplpop может быть полезным

163

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

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

Очень жаль, что YouCompleteMe - это полная PITA для установки на Windows :(
отличная работа с YouCompletMe valloric! Поздравляю
На самом деле, я собираюсь принять это решение. Наконец плагин, который доставляет. Я использую его уже несколько дней. Потребовалось всего четыре года, чтобы ответить на этот вопрос. ;-) Konrad Rudolph
@DrTwox из файла readme: "YCM имеетno official support for Windows, но это не значит, что вы не можете заставить его работать там. См. Вики-страницу руководства по установке Windows. Не стесняйтесь добавлять к нему. & Quot;
В этом посте должно быть упомянуто, что вы являетесь автором, поскольку это самореклама на границе (хотя я не буду утверждать, что она отвечает на вопрос, тем не менее, вы должны включить отказ от ответственности).
7

Посмотри на это:

Vim integration to MonoDevelop for .net stuff at least.. OmniCompletion

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

Удачи и счастливого кодирования.

Я предлагаюgithub.com/nosami/OmniSharpServer с YouCompleteMe для C #, как предложено выше
OmniCompletion ссылка не работает
35

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

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

@KonradRudolph Спасибо. Я проверю это.
The clang_complete plugin works nicely on Cygwin and Windows. Ничего не могу сказать о больших проектах, потому что у меня их нет. :)
Кажется, что clang_complete, использующий libclang, теперь имеет кеширование. Это должен быть принятый ответ. Вы пробовали clang_complete на ядре Linux? Лучшее индексирование, которое я видел для ядра, - это использование Eclipse CDT, если clang_complete может обрабатывать ядро, то должно быть в состоянии выполнить что угодно.
clang_complete - это просто лучший плагин Vim, который я использую.
@Cromulent Ах, проверьте YouCompleteMe, это намного лучше. Konrad Rudolph
5

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

Eclim, похоже, является отличным решением для Java, хотя Eclipse по-прежнему остается чудовищным для загрузки даже в автономной установке
@Pacane: нет. У меня не было месяцев, чтобы использовать Java, и у меня не было свободного времени для экспериментов. Konrad Rudolph
Для Java вы можете использоватьVrapper, Я считаю, что обычно все в порядке с превосходным автозаполнением. Для периодического редактирования текста я могу запустить настоящий Vim как внешний инструмент.
Вы проверяли это? Кажется интересным

Похожие вопросы