跳到主要内容

Emacs 作为编程环境

Emacs 具有 C、Emacs Lisp、Lisp、Fortran、Perl 等语言模式,结合它的强定制性,可实现编写代码,调试,运行。

文件扩展名关联模式

关联 ada 语言的例子
(autoload 'ada-mode "ada")
(setq auto-mode-alist (cons '("\\.a$". ada-mode ) auto-mode-alist))

语言感知

Emacs 把语法信息放在语法表(syntax tables)中,分为全局语法表和局部语法表:

  • 单词:标识符和数字
  • 符号:操作符
  • 括号:如 () []
  • 空白:空格和制表符
  • 注释:单行和多行注释

还包括,如:

  • 语句
  • 语句块
  • 函数
  • 过程
  • S表达式

缩进 indent

对选中进行缩进,indent-region,ESC C-\ 跳到缩进后,back-to-indentation,ESC m 删除缩进,delete-indentation,ECS ^

作为 C 和 C++ 编程环境

  • .c, .h, .y, .lex 文件自动进入 C 语言模式,快捷键 M-x c-mode RET
  • .C, .H, .cc, .hh, .cpp, .cxx, .c++, .h++ 文件自动进入 C++ 语言模式,快捷键 M-x cc-mode RET

C++ 模式只比 C 模式多出很少几项功能,.pl 会进入 Perl 语言模式(perl-mode)是源自 C 语言模式旧版本。

C 模式中,分号 ; 冒号 : 逗号, 花括号 {} 井号 # 等都是自动缩进的。

动作键盘操作命令名称备注
移到语句开始M-ac-beginning-of-statement
注释段落重排M-qc-fill-paragraph保留缩进和前导字符
移到函数开始C-M-abeginning-of-defun
移到函数末尾C-M-eend-of-defun
选中函数C-M-hc-mark-function
缩进函数C-c C-qc-indent-defun
移到#define条件的开始C-c C-uc-up-conditional
移到上一个#define条件C-c C-pc-backward-conditional
移到下一个#define条件C-c C-nc-forward-conditional

C 缩进风格

名称风格
bsdBSD 系列的 UNIX 版本使用的编程风格
cc-mode默认的编程风格;其他样式都是从它推导出来的
ellemtel瑞典 Ellemtel 电讯系统实验室的 C++ 文档里使用的编程风格
gnuEmacs 自身和其他 GNU 程序所使用的 C 语言书写风格
java在编写 Java 代码时使用的风格(Java 模式的默认值)
k&rKernighan 和 Ritchie 合著《The C Programming Language》一书中使用的编程风格
linux部分 Linux 内核中 C 代码所使用的一种风格
pythonPython 扩展中使用的风格
stroustrupBjarne Stroustrup 《The C++ Programming Language》一书中使用的编程风格
user通过定制 .emacs 文件或自定义。
whitesmithWhitesmith 公司在他们的 C 和 C++ 编译器软件的文档里使用的编程风格

作为 Lisp 编程环境

动作键盘操作命令名称备注
移到上个 S 表达式C-M-bbackward-sexp
移到下个 S 表达式C-M-fforward-sexp
交换 S 表达式C-M-ttranspose-sexps
选中 S 表达式C-M-@mark-sexp
向后移除 S 表达式C-M-kkill-sexp
向前移除 S 表达式backward-kill-sexp
移到上个列表C-M-nforward-list
移到下个列表C-M-pbackward-list
向前移动,进入下一层次C-M-ddown-list
向前移动,退出当前层次up-list

Fortran模式

也很少有使用这种语言的机会了。