索引
您可能需要使用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存储库中)。
您可能想查看GNU global plus xgtags.el和clang based auto-complete。语义也可以同时使用。 – Arne 2013-03-07 22:30:25
检查铿锵C++自动完成:http://root42.blogspot.hu/2012/07/nice-c-autocomplete-configuration-for.html – Tom 2013-03-08 07:11:07
我目前正在开发['clang-tags'](https:/ /github.com/ffevotte/clang-tags),这是一个基于clang的索引工具。它仍处于开发的早期阶段,但您可能会发现它是可用的。如果你确实尝试过,我会很高兴在github上获得一些反馈。 – Francesco 2013-03-08 07:29:04