用emacs 阅读 c/c++ 代码
程序员文章站
2022-06-18 19:50:31
在emacs编程中有以下需求 从调用一个函数的地方跳转到函数的定义的地方 或是反过来从函数定义的地方列出所有调用这个函数的地方 实现办法 需要安装以下软件 gnu global(阅读源代码的工具) "官网" emacs的gtags插件 启动emacs后,输入下面的命令,来启动gtags的功能 gnu ......
在emacs编程中有以下需求
- 从调用一个函数的地方跳转到函数的定义的地方
- 或是反过来从函数定义的地方列出所有调用这个函数的地方
实现办法
需要安装以下软件
- gnu global(阅读源代码的工具)
- emacs的gtags插件
- 启动emacs后,输入下面的命令,来启动gtags的功能
M-x ggtags-mode
gnu global安装
apt-get install global
emacs的gtags插件安装
M-x list-packages
找到ggtags后,鼠标点击,再点安装
使用方法
1,在存放代码的根目录执行:
$ gtags
执行后,会发现在生成了3个文件, GPATH GRTAGS GTAGS
2,启动emacs
3,启动emacs后,输入下面的命令,来启动gtags的功能
M-x ggtags-mode
4,使用下面的函数就可以实现,查看代码的各种需求了。
ggtags-find-tag-dwim Find a tag by context. If point is at a definition tag, find references, and vice versa. If point is at a line that matches ``ggtags-include-pattern``, find the include file instead. To force finding a definition tag, call it with a prefix (``C-u``). ggtags-find-tag-mouse Like ``ggtags-find-tag-dwim`` but suitable for binding to mouse events. ggtags-find-definition Find definition tags. With ``C-u`` ask for the tag name with completion. ggtags-find-reference Find reference tags. With ``C-u`` ask for the tag name with completion. ggtags-find-other-symbol Find tags that have no definitions. With ``C-u`` ask for the tag name with completion. ggtags-find-tag-regexp Find definition tags matching a regexp. By default it lists all matching tags in the project. With ``C-u`` restrict the lists to a directory of choice. ggtags-idutils-query Use idutils to find matches. ggtags-grep Grep for lines matching a regexp. This is usually the slowest. ggtags-find-file Find a file from all the files indexed by ``gtags``. ggtags-query-replace Do a query replace in all files found in a search. Handling multiple matches +++++++++++++++++++++++++ When a search finds multiple matches, a buffer named ``*ggtags-global*`` is popped up and ``ggtags-navigation-mode`` is turned on to facilitate locating the right match. ``ggtags-navigation-mode`` makes a few commands in the ``*ggtags-global*`` buffer globally accessible: ``M-n`` Move to the next match. ``M-p`` Move to the previous match. ``M-}`` Move to next file. ``M-{`` Move to previous file. ``M-=`` Move to the file where navigation session starts. ``M-<`` Move to the first match. ``M->`` Move to the last match. ``C-M-s`` or ``M-s s`` Use ``isearch`` to find the match. ``RET`` Found the right match so exit navigation mode. Resumable by ``M-,`` (``tags-loop-continue``). ``M-*`` Abort and go back to the location where the search was started. Miscellaneous commands ++++++++++++++++++++++ Commands are available from the ``Ggtags`` menu in ``ggtags-mode``. ggtags-prev-mark Move to the previously (older) visited location. Unlike ``M-*`` this doesn't delete the location from the tag ring. ggtags-next-mark Move to the next (newer) visited location. ggtags-view-tag-history Pop to a buffer listing all visited locations from newest to oldest. The buffer is a next error buffer and works with standard commands ``next-error`` and ``previous-error``. In addition ``TAB`` and ``S-TAB`` move to next/prev entry, and ``RET`` visits the location. ``M-n`` and ``M-p`` move to and display the next/previous entry. ggtags-view-search-history View or re-run past searches as kept in ``ggtags-global-search-history``. ggtags-kill-file-buffers Kill all file-visiting buffers of current project. ggtags-toggle-project-read-only Toggle opening files in ``read-only`` mode. Handy if the main purpose of source navigation is to read code. ggtags-visit-project-root Open the project root directory in ``dired``. ggtags-delete-tags Delete the GTAGS, GRTAGS, GPATH and ID files of current project. ggtags-explain-tags Explain how each file is indexed in current project. ggtags-browse-file-as-hypertext Use ``htags`` to generate HTML of the source tree. This allows browsing the project in a browser with cross-references.
使用举例
1,从调用一个函数的地方跳转到函数的定义的地方
M-x ggtags-find-definition
2,从调用一个函数的地方跳转到函数的定义的地方后,返回到调用函数的地方
M-x ggtags-prev-mark
3,或是反过来从函数定义的地方列出所有调用这个函数的地方
M-x ggtags-find-reference
4,查看导航过的历史记录
M-x ggtags-view-tag-history