西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页西西教程软件使用 → Emacs 23.2 自带的Cedet的使用

Emacs 23.2 自带的Cedet的使用

相关软件相关文章发表评论 来源:本站整理时间:2010/11/29 11:54:17字体大小:A-A+

作者:佚名点击:1770次评论:0次标签: CEDET Emacs Helpter

emacs for windows23.1 免费英文版
  • 类型:文本编辑大小:38.1M语言:英文 评分:7.7
  • 标签:
立即下载
3 页 Cedet的使用
4 Cedet的使用

4.1 命名补齐
这里的补齐包括函数名称,变量名等等,是很常用的一个功能。 个人以为最实用的一个补齐是 semantic-ia-complete-symbol, 他可以通过快捷键"C-c, /" 来调用。为了使用方便并和其他Package统一, 我将该函数添加到了hippie-expand中, 并将hippie-expand包进了自定义的函数indent-or-complete (从别人的配置文件中找到的)中,并将这个函数绑定到了Tab上。 这样,大多数情况下,通过Tab即可实现补齐或者对齐。 如果偶尔Tab不成功,再使用"M-/"或者"C-c, /"来修正一下。

这段配置的Lisp代码如下:

;;;; 缩进或者补齐
;;; hippie-try-expand settings
(setq hippie-expand-try-functions-list
'(
yas/hippie-try-expand
semantic-ia-complete-symbol
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs))

(defun indent-or-complete ()
"Complete if point is at end of a word, otherwise indent line."
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command)
))

(defun yyc/indent-key-setup ()
"Set tab as key for indent-or-complete"
(local-set-key [(tab)] 'indent-or-complete)
)
此外,对于C和C++的struct/class结构,函数semantic-complete-self-insert 可以插入类或结构中的成员变量,将至绑定到"."或者">",会加速代码编写的效率:

;;;; C-mode-hooks .
(defun yyc/c-mode-keys ()
"description"
;; Semantic functions.
(semantic-default-c-setup)
(local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu)
(local-set-key "\C-cb" 'semantic-mrub-switch-tags)
(local-set-key "\C-cR" 'semantic-symref)
(local-set-key "\C-cj" 'semantic-ia-fast-jump)
(local-set-key "\C-cp" 'semantic-ia-show-summary)
(local-set-key "\C-cl" 'semantic-ia-show-doc)
(local-set-key "\C-cr" 'semantic-symref-symbol)
(local-set-key "\C-c/" 'semantic-ia-complete-symbol)
(local-set-key [(control return)] 'semantic-ia-complete-symbol)
(local-set-key "." 'semantic-complete-self-insert)
(local-set-key ">" 'semantic-complete-self-insert)
;; Indent or complete
(local-set-key [(tab)] 'indent-or-complete)
)
(add-hook 'c-mode-common-hook 'yyc/c-mode-keys)
4.2 获取Tag信息
semantic-ia-show-doc, semantic-ia-show-summary, semantic-ia-describe-class 这三个函数可以用来获取Tag信息,显示出代码的注释(包括Doxgen的注释), 对于阅读代码有很大帮助。

这些函数可以按照自己的习惯去绑定。其中前面两个的绑定过程在前面的 yyc/c-mode-keys中可以找到。

4.3 代码中的跳转
阅读代码时候,在不同的Tag中跳转是一个很有用的功能。 Cedet提供了这个功能,但是我手头上的Emacs 23.2 中自带的Cedet在Tag 跳转上有个问题————可以用 semantic-ia-fast-jump 跳转到Tag定义, 但是每次跳转后,却不能跳回来。

按照本文3.1节的方法设置Helper以后,在配置文件中添加下面的代码可以解决这一问题:

(defadvice push-mark (around semantic-mru-bookmark activate)
"Push a mark at LOCATION with NOMSG and ACTIVATE passed to `push-mark'.
If `semantic-mru-bookmark-mode' is active, also push a tag onto
the mru bookmark stack."
(semantic-mrub-push semantic-mru-bookmark-ring
(point)
'mark)
ad-do-it)
4.4 查找函数调用
前面一节说的是在当前函数中,跳到Tag定义;而这里, 说的是查看当前光标下面的函数被哪些函数调用了。 Cedet中的 semantic-symref 实现了这一功能。 可以将该函数绑定到自己喜欢的快捷键上,如4.1中所示。

对于代码的浏览这个部分,我大部分时候使用的是global这个工具, global配置Xgtags来用,很方便。

4.5 Srecode的使用
Cedet提供了srecode,用于自动生成代码。但,个人感觉这个功能不怎么好用, 或者说是我不会用吧。

Emacs 23.2中自带的Cedet,仅提供了srecode的功能,但却没有将需要的template 一起和emacs一同发布出来。

对此,我的做法是修改了srecode-map-load-path,添加了 "~/.emacs.d/templates/srecode",

;;;; Custom template for srecode
(setq srecode-map-load-path
(list (srecode-map-base-template-dir)
(expand-file-name "~/.emacs.d/templates/srecode")
))
然后从cedet官网上 下载源码包,并把template解压到 "~/.emacs.d/templates/srecode"中。

然后将可以使用srecode-insert之类的函数来插入代码模版了。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)