在这个指南中,我将帮助你搭建一个高效的C/C++开发环境。尽管看起来很长,但步骤清晰简短(主要是复制/粘贴Emacs Lisp代码到你的init.el文件中)。指南中的大部分操作都会有解释,并且强调其特点。遵循这个指南,你将能够很高效的在Emacs中浏览Linux内核代码树,可以实现像跳转到光标处的定义或者引用,在跳转点之间前进或者后退,立刻找到某个文件,在.h文件和.c/.cpp文件之间跳转等。

一些例子:
.h文件和.c/.cpp文件之间跳转

通过使用helm-semantic-or-imenu显示树型代码轮廓

符号引用

代码补全1

代码补全2

头文件补全

在底部显示函数接口

将光标处的函数置顶显示

编译支持

编译输出

花哨的GDB调试

得到光标处命令的手册

导航:
准备:
知道如何使用package.el和MELPA。如果你不清楚,阅读《如何使用Emacs扩展管理》

全局安装GNU,可以在这里下载,或者可以通过你的操作系统的软件管理程序下载。对于Windows用户,在这里下载

安装ggtags,当从MELPA安装ggtags之后,用下面的代码配置ggtags以及按键绑定。

或者,helm + helm-gtags 。 Helm很棒,如果你打算使用Helm,请阅读Helm指南,记得在使用helm-gtags之前安装Helm,你也可以使用这个默认配置。当将上面的文件添加到你的~/.emacs.d时,记得添加(require 'setup-helm)到你的init.el

在使用ggtags和helm-gtags之前,记得在你的项目root目录下执行gtags以创建GTAGS数据库。

执行完成之后,下面几个文件会创建出来

GTAGS: 定义数据库
GRTAGS: 引用数据库
GPATH: 路径名数据库

如果你使用ggtags,要使用ggtags-create-tags创建GTAGS数据库。这是推荐用法,以让它知道项目root在哪。

基本移动:
C-M-f执行forward-sexp,在呼应的符号之间向前移动,比如一对大括号:

C-M-b执行backward-sexp,与C-M-f相反:

C-M-k执行kill-sexp,删除呼应符号之间的内容,比如一对大括号之间的内容:

C-M-或者C-M-@执行mark-sexp,选中呼应符号之间的内容:

C-M-a执行beginning-of-defun,移动光标到函数的定义开头:

C-M-e执行end-of-defun,移动光标到函数的结尾:

C-M-h执行mark-defun,选中一个函数的全部内容:

阅读原文

109 4 收藏


直接登录

推荐关注