2006-10-16

Emacs C && C++ (转载)

http://www.emacs.cn/Doc/CProgram

Emacs对于编辑程序有很多方便的功能,下面是在编辑C程序时常用到的一些功能。

下面是一个示例的.emacs文件:

(add-hook 'c-mode-hook 'linux-c-mode)
(add-hook 'c++-mode-hook 'linux-cpp-mode)
;; 设置imenu的排序方式为按名称排序
(setq imenu-sort-function 'imenu--sort-by-name)
(defun linux-c-mode()
;; 将回车代替C-j的功能,换行的同时对齐
(define-key c-mode-map [return] 'newline-and-indent)
(interactive)
;; 设置C程序的对齐风格
(c-set-style "K&R")
;; 自动模式,在此种模式下当你键入{时,会自动根据你设置的对齐风格对齐
(c-toggle-auto-state)
;; 此模式下,当按Backspace时会删除最多的空格
(c-toggle-hungry-state)
;; TAB键的宽度设置为8
(setq c-basic-offset 8)
;; 在菜单中加入当前Buffer的函数索引
(imenu-add-menubar-index)
;; 在状态条上显示当前光标在哪个函数体内部
(which-function-mode)
)
(defun linux-cpp-mode()
(define-key c++-mode-map [return] 'newline-and-indent)
(define-key c++-mode-map [(control c) (c)] 'compile)
(interactive)
(c-set-style "K&R")
(c-toggle-auto-state)
(c-toggle-hungry-state)
(setq c-basic-offset 8)
(imenu-add-menubar-index)
(which-function-mode)
)

一此有用的快捷键:

  • C-c C-c 注释区域,此命令等同于M-x comment-region,但C-c C-c仅适用于C程序,而M-x comment-region适用于任何程序。
  • C-u C-c C-c :: 在c-mode下C-c C-c comment-region,C-u C-c C-c是uncomment-region.
  • C-M-\ 对齐一个区域,用些命令要先保证区域已经被选中,则用系统默认的对齐方式进行对齐。
  • C-c C-q 自动对齐一个函数。将光标停在一个函数体内,然后按这个键,可以自动将函数的内容按默认的对齐方式对齐。
  • TAB 重新缩进当前行
  • C-c . 设置缩进风格(按TAB键可列出可用的风格,缺省的为gnu,其缩进为2个字符;linux为8个;k&r为5个…)
  • M-/ 自动补齐(缓冲区中能找得到的串)
  • M-; 行尾加入注释
  • C-c C-e 扩展宏,察看当前宏的值
  • C-c C-\ 通过'\'连接多行代码

子模式

auto-state 当你输入时自动缩进,自动换行
hungry-state 当你Backspace时,自动删除尽可能多的空白和空行
  • C-c C-t 同时转换(开/关)auto-state和hungry-state子模式
  • C-c C-a 转换 auto-state 子模式
  • C-c C-d 转换 hungry-state 子模式

编译与调试

  • M-x compile 可以输入命令对程序文件进行编译,编译器的输出在一个另外一个子窗口中显示,将光标移到*compilation* 中的一行错误提示上击回车(或直接鼠标中键)即可在程序中定位错误。
  • M-x gdb RET 调试
  • C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另一个显示源码的出错位置
  • C-c C-c 转到出错位置

启动gdb调试器后,光标在源码文件缓冲区中时:

  • C-x SPC 在当前行设置断点
  • C-x C-a C-s step
  • C-x C-a C-n next
  • C-x C-a C-t tbreak
  • C-x C-a C-r continue

1 条评论: