CEDET使用

cedet是一个工具集合,为我们提供了一些更使用的功能,它包括下面几个工具。
EDE-项目管理
Semantic-自动补全和代码间跳转
SRecode - 模板,通过定义一些模板,可以快速的插入一段代码
Cogre - C++类生成UML 图
Speedbar - 显示目录树,函数列表等

虽然这里有很多工具,但是我用的最多的就一个Semantic,另外Speedbar也可以快速的查看一些内容,其它的很少用到,所以也不是很清楚。
cedet提供了几个不同的功能组合,

semantic-load-enable-minimun-features
semantic-load-enable-code-helpers
semantic-load-enable-guady-code-helpers 
semantic-load-enable-
excessive-code-helpers 
semantic-load-enable-
semantic-debugging-helpers 
用户可以根据自己的需求来使用。我一般使用semantic-load-enable-code-helpers。
在.emacs中加入
(load-file "yourdir/cedet-1.0pre7/common/cedet.el")
(require 'cedet)
(
semantic-load-enable-code-helpers)

设置include位置
为了能使semantic在补全时找到函数和结构体,要添加一些头文件的位置,包括系统的和用户自定义的
(require 'semantic-ia)
(require 'semantic-gcc)
(setq-mode-local c-mode semanticdb-find-default-throttle
         '(project unloaded system recursive))
(require 'semanticdb)
(defconst cedet-user-include-dirs
  (list ".." "../include" "../.." "../../.." "../../include" "../../../inlcude" "../inc" 
        "../.." "../../include" "../../inc" ".
        "/usr/include/sys" "/usr/include/bits"   ))
(setq cedet-sys-include-dirs (list
                              "/usr/include"))
(let ((include-dirs cedet-user-include-dirs))
  (setq include-dirs (append include-dirs cedet-sys-include-dirs))
  (mapc (lambda (dir)
          (semantic-add-system-include dir 'c++-mode)
          (semantic-add-system-include dir 'c-mode))
        include-dirs))

代码补全命令

semantic提供了下面几个补全命令
senator-complete-symbol
senator-completion-menu-popup
semantic-ia-complete-symbol
semantic-ia-complete-symbol-menu 
semantic-complete-self-insert
在.emacs中添加下面代码
(defun my-cedet-hook ()
  (local-set-key [(control return)] 'semantic-ia-complete-symbol-menu))
(add-hook 'c-mode-common-hook 'my-cedet-hook)
; (defun my-c-mode-cedet-hook ()
; (local-set-key "." 'semantic-complete-self-insert)
; (local-set-key ">" 'semantic-complete-self-insert))
;(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)

这样你就可以用C-enter来补全了。注意,我这里后面的my-c-mode-cedet-hook这些我已经注释掉的,不喜欢用它,当我想补全结构体成员是,无非是多按个C-enter,另外这个补全还是比较智能的,比如你输入int n = p->时,它会只补全p中int类型的成员。这样在一个很大的结构体中是很实用的。还有就是函数补全,输入一个函数命的几个字母,然后C-enter,这时就会列出相关的函数。
虽然semantic是比较智能的,但是有时也会很傻,比如有时结构体成员补全不正确,有的系统函数找不到等,如果出现这种情况,我一般是先打开相对应的头文件,输入前面几个字符,然后用M-/来补全,暂时没有什么其它好办法,不过这毕竟是少数情况。
(未完待续)

你可能感兴趣的:(项目管理,lambda,工具,include,UML,Semantic)