Emacs не может конкурировать с другой IDE, если у него нет функции автозаполнения. Автозаполнение просто делает меня более эффективным программистом. Я знаю расширение Auto Complete Mode , но оно не работает с C ++.
Как я могу добиться умного и эффективного автозаполнения для C ++?
Первоначально этот вопрос был задан Малабарбой по предложению Зоны 51: Как получить интеллектуальное автозаполнение в C ++?
c++
completion
Люк
источник
источник
Ответы:
Отказ от ответственности: я автор режима иронии
Если вы просто хотите умного автозаполнения, я могу порекомендовать ироничный режим с фирменной иронией .
Еще один инструмент, который еще не цитировался, это emacs-ycmd .
источник
irony-mode
clang_codeCompleteAt
с проанализированным TU (но несохраненные изменения) занимают 3-5 секунд. Этоirony-mode
быстрее, чем это?Проверьте мой гид . В нем перечислены несколько методов автозаполнения в C / C ++.
Эти варианты:
Используя Иронию . Настоятельно рекомендуется, поскольку он использует Clang и прост в настройке по сравнению с другими решениями.
Использование встроенного парсера из Emacs. Это лучшее автозаполнение, которое вы можете получить из синтаксического анализатора Emacs, Semantic, но оно будет медленным в больших проектах, таких как ядро Linux.
Используя
company-mode
пакет сcompany-clang
. Обеспечивает точное выполнение кода для системных включаемых путей, поскольку он может автоматически получать пути от Clang, но должен выполнить некоторую настройку для локального проектаИспользование
company-mode
сcompany-gtags
. В качестве завершения он использует базу данных тегов, сгенерированную из GNU Global. Вы можете использовать это для предоставления кода, завершенного локально для вашего проекта. Это не совсем разумно, так как он бросает вам все в сгенерированной базе данных.rtags
идет дальше, предоставляя сервер для анализа в реальном времени. Но это сложно настроить по сравнению с чистым решением Elisp.источник
Я имел большой успех с RTags + Company .
RTags требует отдельного
rdm
работающего демона, который использует clang для завершения кода, навигации по коду и рефакторинга.rdm
также функционирует как база данных символов, а это означает, что автозаполнение происходит намного быстрее, чем любое решение, просто вызывающее напрямуюclang_codeCompleteAt
.Rdm нужна информация о флагах компиляции для ваших проектов , которые могут быть хлопоты, но если вы будете следовать советам из RTags страницы и символические ссылки
gcc-rtags-wrapper.sh
наgcc
,g++
,cc
иc++
RDM автоматически обновляется с новыми флагами компиляции на перекомпиляции.источник
Решение 1: компания-режим + лязг
Единственная проблема заключается в том, что вам нужно указать company-mode, где искать заголовочные файлы вашего проекта c / c ++.
Если вы используете cmake, вы можете позволить https://github.com/redguardtoo/cpputils-cmake выполнить настройку для вас (СОВЕТ: я являюсь автором cpputils-cmake).
ИЛИ
Решение 2: компания-режим + GNU Global
Больше нечего сказать, вам нужно создать теги с помощью инструмента GNU Global Cli, как уже упоминалось.
источник
Я использовал cmake-ide для настройки rtags, flycheck, иронии и company-clang.
Теперь вы можете настроить свою систему сборки и ваши любимые плагины статического анализа emacs одновременно!
РЕДАКТИРОВАТЬ: Обратите внимание, что компания Clang предоставляет автозаполнения, которая была функция, которую вы искали. cmake-ide также может настраивать flycheck и rtags, что добавляет еще несколько IDE-подобных функций.
источник
Mx семантический режим
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Теги Таблицы
находить . -name "*. [chCH]" -print | Этагс -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - создать файл тегов для Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
CMi (или M-TAB) завершение в точке. Если семантический режим включен, пытается использовать данные семантического анализатора. Если семантический режим отключен или не работает, попытка завершиться с использованием таблицы выбранных тегов (см. Теги)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M-. (find-tag) предлагает имя тега && перейти к определению
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
источник