索引
您可能想要使用GNU/global而不是 ctags:它支持 C++,并且在我看来对大型项目更有效(特别是因为您可以更新索引而不是从头开始重建它)。使用 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存储库中)。