Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1259722
  • 博文数量: 264
  • 博客积分: 10772
  • 博客等级: 上将
  • 技术积分: 2325
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 11:54
文章分类

全部博文(264)

文章存档

2012年(4)

2011年(51)

2010年(31)

2009年(57)

2008年(51)

2007年(70)

分类: LINUX

2008-01-28 19:58:32

C 程序

怎样在没有生成 TAGS 文件的时候在程序里跳转到某一个函数?

使用 imenu 或者 senator. 推荐使用 senator, 因为它来自 sematic,一个可以分析很多种语言文法的东西,你可以使用 C-c , j 跳转到文件里任何的函数或者变量。输入函数时按 TAB 可以补全函数名。看看这幅图

imenu 在 semantic 加强后可以在 project 内的函数变量间跳转。看这幅图

怎样方便的知道正在使用的变量,函数的类型?

使用 semantic-summary-mode 之后,把光标放在C, C++, Java 的变量名,函数名之后,minibuffer 里就会显示它的类型。看看这幅图。如果放在 lisp 函数,变量上,就会显示它的 docstring, 看这幅图

  • 一个小问题。

semantic-summary-mode 只显示当前 project 里的函数和变量定义。这个 project 是由 semanticdb-project-roots 定义的。这个变量就是说:我们的 project 的根目录在这些地方。

(setq semanticdb-project-roots (list "/home/wy/rect"))

这样,不在这个目录之下(包括子目录)的文件就不会被检索。这样有一个问题,如何 summary /usr/include 里的头文件里定义的库函数?似乎只有

(setq semanticdb-project-roots (list "/"))

这样的办法才能做到?

怎样在编辑程序时自动补全函数名和变量名?

这有很多方法:

简单的办法:senator.

senator 可以在已经分析的文件里提取匹配前缀的符号进行补全。

  • senator-complete-symbol

补全当前的部分变量名,函数名或类型名。它通常绑定在 C-c , TAB。反复调用这个函数就可以在补全之间循环。

  • senator-completion-menu-keyboard-popup

弹出一个补全菜单。它可以由 C-c , SPC 或 S-mouse3 调出。看这幅图

使用 sematic-ia

semantic-ia 是智能补全。 semantic-ia-complete-symbol 是直接补全,你可以重复执行来得到你需要的匹配。 semantic-ia-complete-symbol-menu 可以弹出一个菜单让你选择。

你可以把 semantic-ia-complete-symbol 绑定到 M-TAB, 把 semantic-ia-complete-symbol-menu 绑定到s-mouse3.

为了直观,我现在只示范一下使用 semantic-ia-complete-symbol-menu:

  • 我输入一个结构指针的名字,加上一个 "->",然后调用 semantic-ia-complete-symbol-menu,出现一个这个结构里成员的 列表。 如 图
  • 我选择了 inact 成员,它是一个 float 类型, 然后输入了一个 "=" 号。然后再次补全。如 图,类型是 float 的变量和返回类型是 float 的函数都在列 表里了。

比较一下 senator 这幅图 ?是不是智能了很多?

使用 Speedbar

你可以使用 Speedbar。在输入一个结构或对象之后,Speedbar 会在 completions 一栏显示这个结构的成员,并可以补全一个前缀。

当我输入 "w->" 后,Speedbar 就在 completions 显示出了 Wavefront 结构的成员。当我中键点击 "w" 左边的 "i" 图标后,小窗口显示这个结构的定义。看这幅图

当我中键点击 inact 插入它之后,打入一个 "=" 号,speedbar 里出现了可以赋值给一个 float 类型变量的所有匹配。看这幅图

  • 一个小问题。speedbar 的 completions 不会自动随着你敲入的字 符更新,可以把一个键绑定到 speedbar-refresh 或者 speedbar-update-contents 来更新。或者把这些加入 .emacs:
(add-hook 'speedbar-timer-hook
          (lambda ()
            (speedbar-refresh)))
(setq speedbar-verbosity-level 0)

粗略统计一个程序里函数的复杂度

semantic-chart-nonterminal-complexity-token 可以显示一个统计图,图中是这个文件的函数的复杂度统计。看看这个图。当然这样以行数来计算不是很恰当,不过它还是给我们一些直观的信息。

下载

这些 semantic, speedbar, ... 都可以在 下载。

阅读(1278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~