使用 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 可以在已经分析的文件里提取匹配前缀的符号进行补全。
补全当前的部分变量名,函数名或类型名。它通常绑定在 C-c , TAB。 反复调用这个函数就可以在补全之间循环。
弹出一个补全菜单。它可以由 C-c , SPC 或 S-mouse3 调出。看这幅图。
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:
比较一下 senator 这幅图 ?是不是智能了很多?
你可以使用 Speedbar。在输入一个结构或对象之后,Speedbar 会在 completions 一栏显示这个结构的成员,并可以补全一个前缀。
当我输入 "w->" 后,Speedbar 就在 completions 显示出了 Wavefront 结构的成员。当我中键点击 "w" 左边的 "i" 图标后,小 窗口显示这个结构的定义。看这幅图。
当我中键点击 inact 插入它之后,打入一个 "=" 号,speedbar 里 出现了可以赋值给一个 float 类型变量的所有匹配。看这幅图。
(add-hook 'speedbar-timer-hook (lambda () (speedbar-refresh))) (setq speedbar-verbosity-level 0)
semantic-chart-nonterminal-complexity-token 可以显示一个统计 图,图中是这个文件的函数的复杂度统计。看看这个图。当然这样以行 数来计算不是很恰当,不过它还是给我们一些直观的信息。
这些 semantic, speedbar, ... 都可以在 http://sourceforge.net/projects/cedet 下载。