Emacs как IDE для больших проектов на С++
Я новичок в Emacs. Я должен попытаться найти, как использовать Emacs для использования с большими проектами на С++, в частности, для индексации кода и автоматического заполнения имен функций и поведения Eclipse. Я использовал Vim в течение некоторого времени, когда я использовал ctags для индексации кода в своем проекте, а Vim использовал автозавершение моего кода, используя раскрывающееся меню опций. Я пытаюсь достичь того же самого с Emacs. Но во время моего поиска результаты указывали на CEDET и автозаполнение и другие сторонние плагины.
Я пытался использовать ctags с ctags -e -R .
и etags, но без успеха.
Мне не хватает стандартного способа Emacs для достижения такого же поведения? Какой лучший и самый простой способ добиться того, чего я хочу?
Ответы
Ответ 1
Я успешно использую CEDET с автозаполнением. В принципе, автозаполнение - это поставщик выпадающих списков, и он берет свои источники из разных вещей, особенно из CEDET (но также из etags и Gnu Global, которые я также рекомендую).
Хорошей отправной точкой для CEDET является http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html
У Alex Ott emacs config есть: https://github.com/alexott/emacs-configs - это полезный ресурс.
Обратите внимание, что вам нужно будет захватить CEDET из bzr и правильно установить/настроить автозаполнение. Я настоятельно рекомендую el-get установить автозаполнение (и некоторые другие вещи тоже). Вам нужно будет настроить общие проекты для EDE, чтобы автозаполнение работало для случайных файлов C/С++, не являющихся частью структурированного проекта EDE.
Вам придется потратить некоторое время на настройку emacs, но оно окупается. Инструмент удивительно продуктивен после правильной настройки.
Ответ 2
Индексация
Возможно, вы захотите использовать GNU/global вместо ctags: он поддерживает С++ и, на мой взгляд, более эффективен с большими проектами (особенно с тех пор вы можете обновить индекс, а не перестраивать его с нуля). И еще намного проще использовать этот CEDET/Semantic (который также является фантастическим инструментом, если вы тратите время на его настройку).
Пример использования:
$ cd sources
$ gtags -v # create the index
$ cd subdirectory
$ [hack hack hack]
$ global -u # update the index (can be called from anywhere in the project)
В Emacs активируйте gtags-mode
в буферах исходного кода, чтобы получить доступ к командам gtags:
-
gtags-find-tag
(M-.): найдите определение указанного тега в ваших исходных файлах (gtags
позволяет выбирать между всеми возможными определениями, если их несколько, или непосредственно перескакивает, если есть только одна возможность)
-
gtags-pop-stack
(M-*): вернуться в предыдущее местоположение
-
gtags-find-rtag
: найти все использования указанного тега в исходных файлах
Ниже приведена моя конфигурация для gtags
, которая автоматически активирует gtags-mode
, если найден найденный индекс:
;; gtags-mode
(eval-after-load "gtags"
'(progn
(define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag)))
(defun ff/turn-on-gtags ()
"Turn `gtags-mode' on if a global tags file has been generated.
This function asynchronously runs 'global -u' to update global
tags. When the command successfully returns, `gtags-mode' is
turned on."
(interactive)
(let ((process (start-process "global -u"
"*global output*"
"global" "-u"))
(buffer (current-buffer)))
(set-process-sentinel
process
`(lambda (process event)
(when (and (eq (process-status process) 'exit)
(eq (process-exit-status process) 0))
(with-current-buffer ,buffer
(message "Activating gtags-mode")
(gtags-mode 1)))))))
(add-hook 'c-mode-common-hook 'ff/turn-on-gtags)
Автоматическое завершение
Я не знаю лучшего инструмента, чем auto-complete
. Даже если он не включен в Emacs, его очень легко установить с помощью системы упаковки (например, в marmalade или melpa репозитории).
Ответ 3
Это зависит от того, что вы ищете в среде IDE. Я использую Emacs для довольно большого проекта на С++. Конечно, вам нужно настроить emacs на работу, так как вы хотите, чтобы он работал в большей степени, чем любая другая среда разработки.
Но да CEDET - это начало, хотя оно и не идеально.
Однако для Emacs http://cx4a.org/software/auto-complete/ существует очень хороший автоматический режим автозавершения, он не интеллигентен, но должен каким-то образом интегрироваться с CEDET дайте вам удачный автомобиль автоматически.
Еще одна важная функция, которую я часто использую, - это функция ff-find-other-file
для легкого перехода с заголовков и файлов реализации.
Тогда, конечно, вам нужно бросить свой собственный пудинг. CEDET оказывает поддержку проектам, но я их не тестировал. Однако Emacs хорошо интегрируется с инструментами построения командной строки, такими как make. Ошибки печатаются в буфере, и вы можете легко перейти к правильной строке в Emacs.
GDB также хорошо интегрируется с Emacs M-x gdb
, затем просто запомните команду gdb-many-windows
.
Ответ 4
Я рекомендую посмотреть ток-аут Atila Neves на CppCon 2015 под названием Emacs как среда С++ IDE.
Для получения дополнительной информации см. мой ответ на этот связанный вопрос.
Ответ 5
См. https://emacs.stackexchange.com/info/26518/sequence-of-packages-to-be-installed-to-make-emacs-an-ide-for-c-c
Я использую GNU Global и два популярных плагина Emacs: