`

emacs 中使用etags

 
阅读更多
原文地址:http://blog.csdn.net/emacx/article/details/6064123




以前没有用过这个东西,昨天研究了一下,很不错。把这个东西的使用方法简单的记录在下面! etags是一个用来创建tag table文件的程序,创建的数据格式emacs能够理解(还有一个程序ctags, 创建的tag table文件是给vi用的,和etags命令基本差不错)。 etags能处理 C, C++, Java, Fortran,python,php,perl等很多种语言 etags命令处理在命令行指定的文件,然后默认在当前目录生成表文件(可以通过-o参数修改) etags命令不能支持递归的查找文件,所以使用find命令配合 find . -name "*.[chCHp]*" -print | etags - 这样就可以在当前目录生成一个TAGS文件,剩下的就是在emacs当中使用了! 在emacs中大致记住三个命令 1.ESC x visit-tags-table RETURN --打开Tags tabs文件 2.ESC . 假定当前你把光标放在某个函数或其他语法对象上,这个命令在当前窗口打开当前查找的对象声明,定义所在 3.C-x 4. 这个在一个新窗口中打开--个人认为在阅读代码时这个命令或许更加适用。 4. C-x 1 返回 Emacs中etags的使用 - [技术相关]2006-08-01 etags is basically a multifile search facility that knows about C and Perl function definitions as well as searching in general. With it, you can find a function anywhere in an entire directory without having to remember in which file the function is defined, and you can do searches and query-replaces that span multiple files. etags uses tag tables, which contain lists of function names for each file in a directory along with information on where the functions' definitions are located within the files. Many of the commands associated with etags involve regular expressions (see Chapter 11) in search strings. 使用etags 1.创建tag表。 在当前的工作目录中调用etags程序。它的参数是正则表达式。 如:etags *.[ch]。从所有以.c或.h结尾的文件中,构建一个tag表 在shell mode或M-!命令下,执行etags。输出结果是一个TAGS文件。 如果要更新TAGS文件,则重新调用一下etags命令即可。 2.创建好tag表后,告知emacs。 M-x visit-tags-table 3.相关命令: M-.:在tag表查找函数名中包含有某个字符串的函数。a nice feature:它把光标当前所在的word当作默认查找字符串。 C-x 4:作用与M-.相似,不过是使用另一个缓冲区 M-,:查看下一个函数。如果存在多个符合查询条件的函数,M-.只显示结果列表中按字母序排的第一个函数,M-,用来查看下一个函数 M-x tags-search:输入正则表达式,查找所有列在tag表中的文件。凡是符合reglar expression的内容都显示出来。这点有点类似grep。结果中可通过M-,查看下一个。 M-x tags-query-replace:查询替换。作用在tag中列出的所有文件上。 C-u M-x tags-query-replace:只有完全匹配时,才替换(replaces only matches that are whole words) 如果用Esc或C-g推出了tags-query-replace,可通过M-,再恢复 M-x tags-apropos:如果给定正则表达式作参数,它将在*Tags List*中列出匹配该正则表达式的所有tags M-x list-tags:list所有给定C文件中的在tag表中所有的tag。可通过M-.查看每个函数的定义 1. Etags 基础 在emacs里可以用etags命令生成emacs专用的tags文件,有了此文件之后便可以使用一些emacs tags的命令,比如对于编辑C/C++程序的人员可以方便的定位一个函数的定义,或者对函数名进行自动补齐: find -name "*.h" -or -name "*.cpp" |xargs etags --members / 不好使 --language=c++ 我在使用上述命令时未能成功,但以下命令可以 find -name "*.cpp" -exec etags -a {} /; 或 find . -name "*.[chCH]" -print | etags - 上述命令可以在当前目录查找所有的.h和.cpp文件并把它们的摘要提取出来做成TAGS文件,具体的etags的用法可以看一下etags的manual。 在.emacs中加入这样的语句: (setq tags-file-name "~/sim973/src/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))) 在源代码的目录下面运行这个命令: coon@zevita:/usr/local/arm-elf$ find . | grep '/.h$/|/.cc/$' | etags - 然后在emacs中: 运行M-x visit-tags-table 输入刚才的目录,注意不用输入TAGS 然后就可以用下面的命令浏览tag了 `M-. TAG ' 跳到第一个 TAG 的定义处。 `C-u M-.' 如果刚刚用过 M-. , 那么查找下一个定义处。 `C-u - M-.' 回到上一个定义处。 `C-M-. PATTERN ' 按正则表达式搜索 TAG 的定义。 `C-u C-M-.' 如果刚刚用过了 C-M-. , 那么查找下一个。 `C-x 4 . TAG ' 和 M-. 类似, 不过在另一个窗格显示。(`find-tag-other-window'). `C-x 5 . TAG ' 和 M-. 类似, 不过在另一个窗框显示。(`find-tag-other-frame'). `M-*' 回到开始查找 TAG 的地方。
分享到:
评论

相关推荐

    emacs多年使用总结

    - **功能**: Ledger是一款基于纯文本的会计软件,可以在Emacs中使用。 - **使用**: 创建Ledger日记文件,记录财务交易,使用特定命令查询统计。 ##### 1.5 英文拼写检查Ispell - **功能**: Ispell是Emacs内置的...

    emacs多年使用总结.pdf

    * 代码查看功能:使用 etags 实现代码快速查看和跳转。 * 英文拼写检查:使用 ispell 实现英文拼写检查。 * 发送邮件和使用Mailist、Usenet:使用 Emacs 内置的邮件客户端 functionality。 扩展包 * Ledger 账户...

    Emacs多年使用经验总结

    - **基本描述**:Bbdb 是一个地址簿管理工具,可以集成到 Emacs 中使用。 - **特点**: - 支持联系人的导入导出。 - 可以与其他应用程序共享联系人信息。 - **设置 bbdb 的数据文件**:可以通过 `(setq bbdb-file ...

    dotemacs, 用于vim用户的emacs配置.zip

    dotemacs, 用于vim用户的emacs配置 dotemacs这是我个人的KISS配置。介绍有许多emacs配置,这是什么使这一?吻这是个简单愚蠢的配置。 它用 3个简单构建块构建,足够小,它是白色魔术而不是 black 魔术。简单构建 ...

    lein-codeindex:使用etags,ctags或gtags的索引代码

    1. **etags**:这是一个源于Emacs的源代码标签生成器,它能够为源代码文件生成一个标签文件,这个文件包含了代码中的函数、变量等定义的位置信息。Emacs用户可以通过这个标签文件快速跳转到代码的相应位置。 2. **...

    emacs基本命令

    本文档旨在介绍Emacs中的一些基本命令,帮助用户快速掌握Emacs的基本操作方法。这些命令涵盖了文件操作、编辑、光标移动、复制粘贴、窗口管理、搜索替换以及一些高级特性如书签管理和帮助系统等。 #### 二、文件...

    linux下 t264 库安装 问题总结

    确保安装了Emacs,并学会如何在Emacs中使用`etags`命令,以便提高编程效率。 在虚拟机环境中安装VMware Tools也可能遇到困难。安装步骤包括:以root权限登录Linux,然后在Windows环境下启用VMware Tools安装。将...

    常见Emacs命令整理

    本文将详细介绍Emacs中的一些常用命令,这些命令可以帮助用户提高编辑效率,更好地管理文档。 #### 基本命令 - **C-x C-c**: 用于退出Emacs。 - **C-x C-f**: 打开或创建文件。如果指定的文件不存在,Emacs将创建...

    counsel-etags:快速,节能且功能强大的代码导航解决方案

    表中的内容 忽略目录和文件 对Emacs API的依赖性最小 指定多个标签文件 自动更新标签文件 Rust编程语言 列出所有标签 使用正则表达式和过滤器进行两步式标签匹配 强制更新当前标签文件 打开最近的标签 Ctags设置 ...

    ggtags:GNU全局源代码标记系统的Emacs前端

    `ggtags`可以与其他Emacs插件如` Projectile`、`Etags`、`Flycheck`等协同工作,增强代码编辑和管理的体验。例如,`Projectile`可以帮助管理多个项目,而`Flycheck`则可以在编写代码时实时进行语法检查。 **7. 故障...

    Exuberant Ctags中文手册

    - `-B` 或 `--use-backslash`:在Emacs中使用向后查找模式。 - `-e` 或 `--etags`:启用etags模式,创建适用于Emacs编辑器的标签文件。 - **布尔型参数**:长格式选项中的布尔参数可以省略,默认值为 `=yes`,而 `...

    ctags用法详解..................

    在Emacs中,可以使用`M-.`(或`C-c .`)快捷键实现相同的功能。 4. **高级使用**:`ctags`还提供了丰富的选项来定制索引的生成过程。例如,`--fields=+l`选项可以添加行号信息,便于编辑器更准确地定位;`--...

    TAGS详细用法

    在开发环境中,使用`ctags`工具可以帮助我们更高效地管理代码,特别是当项目变得庞大复杂时。本文将详细介绍`ctags`的基本用法及其高级功能,帮助读者更好地理解如何利用该工具提升工作效率。 #### 名称 `ctags` ...

    glo663wb.zip

    gtags可以与常见的开发环境和编辑器(如Vim的tagbar,Emacs的etags,以及IDEs)集成,提供无缝的代码导航体验。 通过解压"glo663wb.zip"并正确配置,开发者可以获得一个强大的代码导航系统,提升编程效率,更好地...

    AutoMake 中文手册

    - **Emacs Lisp**:解释如何集成Emacs Lisp支持到构建过程中。 - **Gettext**:介绍如何利用Gettext工具进行国际化和本地化。 - **Guile**:指导如何使用Guile脚本来扩展AutoMake的功能。 - **Libtool**:介绍如何...

    Linux入门学习

    ### Linux入门学习知识点详解 ...以上就是从标题、描述、标签以及部分内容中提取的相关知识点,旨在帮助初学者了解Linux的基本概念、安装配置方法以及开发工具的使用技巧。希望这些内容能够对您有所帮助。

    gnu gloabl - win32

    可以运作在多种不同环境(如GNU Emacs,Vim,GNU less,GNU Bash或网页浏览器等),让使用者可以寻找到程式码中的某个特定对象,而且在程式码中来回移动。功能类似于ctags,etags或cscope。 win 环境下 global工具...

    otags:http 的 OPAMified 镜像

    Otags 重载:来自 OCaml 源的 emacs 和 vi 的标签生成安装 $...用法要为标准语法中的 ocaml.ml 和标准语法中的 quote.ml 构建一个 emacs TAGS 表,请执行以下操作: $ otags ocaml.ml -pa rq quotation.ml(注意 otags

Global site tag (gtag.js) - Google Analytics