from: http://blog.csdn.net/wangzq_870305/archive/2009/12/01/4909036.aspx
在windows下常用的源代码查看工具是Source
Inside。在linux下我习惯用用etags、gtags、grep来查看源代码。
etags用于生成TAGS文件来提供emacs快速浏览C/C++源代码,它的最大作用就是能够快速跳转到函数定义、宏定义、数据结构定义、全局变量定
义等。
etags常常和find命令一同使用来生成TAGS文件,如下所示:
find . -name '*.[ch]' | xargs etags -a
etags常用命令:
M-visit-tags-table:选择生成TAGS文件,
M-tags-reset-tags-tables:重新设置tag table
M-. 查找一个tag,比如函数定义类型定义等。
C-u M-. 查找下一个tag的位置
M-* 回到上一次运行M-.前的光标位置。
.emacs中加入这样的语句:
(setq tags-file-name /usr/src/linux/TAGS")
这样emacs就会自动读取这个tags文件的内容。
对于一些project,makefile里已经做好了这一步,例如对工程glibc,执行make -f MakeTAGS
有了etags,为什么还要gtags?
你可能会遇到这样的情况:有一个函数myfunction,在工程的源代码里被调用了十几次,你想把
它们都找出来,这时候,etags只能找到它的定义,并不能找到它的调用。而使用gtags就能够实现这样的功能(当然,还有很多的办法)。
要使用gtags,首先要装global包:
apt-get install global
接着在project是目录下执行:
gtags
你会发现在当前目录多了几个文件:GPATH、GRTAGS、GSYMS、GTAGS。它们就是用于在源文件之间快速跳转。
在emacs里进入到gtags模式,执行“M-x gtags-mode”。
这样就可以使用“gtags-find-pattern”和“gtags-find-symbol”来查找函数调用和声明以及符号声明。
cscope
cscope只针对C语言。
sudo apt-get install cscope
在.emacs里加入这一句:
(require 'xcscope)
在工程的目录里设置cscope的工作目录,并在该目录下生成cscope.file和scope.out文件:
M-x cscope-set-initial-directory
M-x cscope-create-list-of-files-to-index
好了,如果要找一个符号的定义,那么就执行:
M-x cscope-find-global-definition
找调用某个函数的函数,执行:
M-x cscope-find-functions-calling-this-function
C-c s C-h 能找到更多关系cscope的命令。
grep也是一个很好的代码查找工具。例如在一个工程里查找函数名就schedule的函数的定义以及引用,
grep -n -e schedule -r --include=*.[hc] .
如图所示:
小结:
配合使用etags的“find-tag”(也就是M-.)命令和gtags的“gtags-find-symbol”命令、rgrep命令,能够更方
便、快捷地查找源代码
==========================================================
from: http://blog.csdn.net/meteor1113/archive/2009/07/16/4349261.aspx
学习了很多年的emacs,却一直都不能熟练使用,可能有工作太忙的原因,不过最大的原因还是没有坚持。
最近几天不忙了,又把emacs捡了起来,希望能坚持下去吧。
这一次直接使用了emacs23,是一个正在开发中的版本,不过因为对国际化支持得好了,我仍然选择了使用它。这个版本不用再像emacs21那样
自己安装mule了,而且在日文平台上也不用写一堆配置文件了。
目前我在win32和linux平台下除了emacs自带的lisp之外还使用了另外几个扩展:muse、cedet、ecb、cscope等。
muse是用来写日记的,也就是以前的emacs-wiki,现在这个文章就是用muse写的。muse的用法很简单,直接把下载的muse解压到
site-lisp里,打开emacs后load-library
muse-mode和muse-html就可以了。前者是用来加载muse模式用的,只要加载了muse-mode,就可以在任何时候执行muse-
mode切换到muse模式进行编辑,如果一个文件的扩展名是muse,那么打开这个文件的时候还会自动切换到muse模式下。而muse-html是用
来发布用的,它支持html,xhtml,xhtml1.0,xhtml1.1这几种方式,只要在muse模式下用C-c
C-t(muse-project-publish-this-file)或者C-c
C-T(muse-publish-this-file)就可以发布当前文件了。另外,还有muse-latex,muse-texinfo,muse-
docbook等可以用来支持发布不同的格式。
cedet,用来进行代码补全,它的semantic是基于语法分析的,代码补全很智能,而且还有菜单,很好用。
ecb是用来读c/c++代码用的,它把emacs装扮得像一个IDE了。
cscope是用来替代(也不完全是替代,目前我是把cscope和etags结合起来使用的)etags的,用来查找c/c++代码中的符号。
cscope比etags的查找功能更强,不过我喜欢etags的alt+.的简洁用法,所以把etags也留下来了。
装扩展的方法很简单,直接从网上下载代码,解压到site-lisp目录下,在.emacs中require需要的扩展就可以
了。如果像我这么懒的话,连.emacs都可以不用,直接打开emacs,然后运行load-library命令载入就可以了。
==========================================================
from: http://blog.csdn.net/fyzhao/archive/2009/10/13/4658132.aspx
(本文参考,并根据自己的使用情况做了些微修改。)
1. etags 基本用法
在emacs里可以用etags命令生成emacs专用的tags文件,有了此文件之后便可以使用一些emacs
tags的命令,比如对于编辑C/C++程序的人员可以方便的定位一个函数的定义,或者对函数名进行自动补齐:
- find . -name "*.cpp" -print -o -name "*.h" -print | etags -
上述命令可以在当前目录查找所有的.h和.cpp文件并把它们的摘要提取出来做成TAGS文件,具体的etags的用法可以看一下etags的
manual。
在.emacs中加入这样的语句:
- (setq tags-file-name "{/SOURCE/CODE/PATH}/TAGS")
这样emacs就会自动读取这个tags文件的内容。
几个重要的命令。
- M-. 查找一个tag,比如函数定义类型定义等。
- C-u M-. 查找下一个tag的位置
- M-* 回到上一次运行M-.前的光标位置。
- M-TAB 自动补齐函数名。
2. 参考:一些整合的快捷键
易于编译和TAGS的使用,搜集自 zslevin 的帖子(LinuxForum GNU Emacs/XEmacs)
- C-f5, 设置编译命令
- f5, 保存当前窗口然后编译当前窗口文件
- (defun du-onekey-compile ()
- "Save buffers and start compile"
- (interactive)
- (save-some-buffers t)
- (compile compile-command))
- (global-set-key [C-f5] 'compile)
- (global-set-key [f5] 'du-onekey-compile)
- F7, 查找 TAGS 文件(更新 TAGS 表)
- C-F7, 在当前目录下生成包含所有递归子目录的 TAGS 文件(使用了shell中的find命令)
- C-. 开个小窗查看光标处的 tag
- C-, 只留下当前查看代码的窗口(关闭查看 tag 的小窗)
- M-. 查找光标处的 tag,并跳转
- M-, 跳回原来查找 tag 的地方
- C-M-, 提示要查找的 tag,并跳转
- C-M-. 要匹配的 tag 表达式(系统已定义)
- Shift-Tab, C/C++ 和 lisp 等模式中补全函数名(一般情况下M-Tab被窗口管理器遮屏了)
定义按键,在生成相应 tag 文件时,比如一个目录下所有的 *.cpp 和 *.h 文件使用这样的正则表达式 *.[ch]*,在下面的
C-F7 中可能会用到。
- (global-set-key [(f7)] 'visit-tags-table) ; visit tags table
- (global-set-key [C-f7] 'sucha-generate-tag-table) ; generate tag table
- (global-set-key [(control .)] '(lambda () (interactive) (lev/find-tag t)))
- (global-set-key [(control ,)] 'sucha-release-small-tag-window)
- (global-set-key [(meta .)] 'lev/find-tag)
- (global-set-key [(meta ,)] 'pop-tag-mark)
- (global-set-key (kbd "C-M-,") 'find-tag)
- (define-key lisp-mode-shared-map [(shift tab)] 'complete-tag)
- (add-hook 'c-mode-common-hook ; both c and c++ mode
- (lambda ()
- (define-key c-mode-base-map [(shift tab)] 'complete-tag)))
上面定义的命令需要用到的函数:
- (defun lev/find-tag (&optional show-only)
- "Show tag in other window with no prompt in minibuf."
- (interactive)
- (let ((default (funcall (or find-tag-default-function
- (get major-mode 'find-tag-default-function)
- 'find-tag-default))))
- (if show-only
- (progn (find-tag-other-window default)
- (shrink-window (- (window-
height) 12)) ;; 限制为 12 行
- (recenter 1)
- (other-window 1))
- (find-tag default))))
-
- (defun sucha-generate-tag-table ()
- "Generate tag tables under current directory(Linux)."
- (interactive)
- (let
- ((exp "")
- (dir ""))
- (setq dir
- (read-from-minibuffer "generate tags in: " default-directory)
- exp
- (read-from-minibuffer "suffix: "))
- (with-temp-buffer
- (shell-command
- (concat "find " dir " -name \"" exp "\" | xargs etags ")
- (buffer-name)))))
-
- (defun sucha-release-small-tag-window ()
- "Kill other window also pop tag mark."
- (interactive)
- (delete-other-windows)
- (ignore-errors
- (pop-tag-mark)))
==========================================================
from: http://blog.chinaunix.net/u/15586/showart_1190390.html
在Emacs中使用etags来浏览代码
对于代码量比较大的情况而言,浏览代码就是一件很重要的事情了。在vi中提供了一个比较好的插件来进行相关操作,但是Emacs又该怎么办呢?
使用Emacs浏览代码有三个方案,最简单的就是etags,第二种是cscope,第三种暂时想不起来了。今天只说最简单的方式,由简入难吧。
我本以为etags像其它插件一样,就是一个el文件,然后执行一下,后来发现我错了。etags其实是个shell命令。
1).安装etags,一般来讲,这是emacs的内建程式;
2).在当前目录建立tag table:M-! etags
*.[ch];
3).使用:
A.M-. :跳至相应的函数定义处;
B.M-* :返回刚才的函数名处;
C.C-u M-. :如果emacs找错了,找下一个;
D.M-Tab :自动补齐函数名;
4).在当前目录将.h和.cpp文件提取出来做成tags文件:
find . -name "*.[chCH]" -print |
etags -
或
find -name "*.cpp" -exec etags -a {} ;
5).将创建好的tag表通知emacs:
M-x visit-tags-table
6).让emacs自动读取tag文件内容:
在~/.emacs文件中类似如下内容:
(setq
tags-file-name "~/project/src/TAGS")
好了,基本上大体的用法就是这样的了。虽然用起来不是很方便,而且没有类似于代码浏览器那样的视图,但是倒可以满足最基本的需求,不是吗?
(--完--)
==========================================================
阅读(2040) | 评论(0) | 转发(0) |