syhd142  
日历
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
统计
  • 随笔 - 23
  • 文章 - 122
  • 评论 - 31
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔档案(23)

文章分类(270)

文章档案(122)

我的豆瓣

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

转至:http://www.zeuux.org/science/learning-emacs.cn.html


学习GNU Emacs

作者:夏武

1 GNU Emacs介绍

Emacs编辑器是最受欢迎、传播范围最广、也是最强大和最灵活的UNIX文本编辑器。与其他文本编辑器的重要区别在于它是一个完备的工作环境,使用Emacs可以完成各种日常工作。对很多Emacs用户来说,Emacs已经超越了编辑器的范畴,使用Emacs是一种文化,一种生活。 GNU Emacs是GNU开发的Emacs变体,也是最广泛使用的Emacs编辑器。本文将以GNU Emacs为例讲解GNU Emacs编辑器的使用和技巧。首先介绍一下常用的快捷键,接着介绍GNU Emacs扩展,最后是.emacs文件的配置。

2 快捷键

GNU Emacs的快捷键都是绑定于CTRL键和ALT键上。每个快捷键对应一个指令名称,也就是一个对应的函数名称,这允许你根据不同的喜好将快捷键绑定到不同的指令名称。另外,在Emacs中有很多的指令没有绑定快捷键,我们可以通过M-x 指令名称来执行指令。例如,全文替换我们可以使用M-x replace-strings。这样,很多没有绑定快捷键的功能都可以用到了。

2.1 基本操作

表1是基本操作指令列表。

表1 基本操作指令

快捷键指令名称用途快捷键指令名称用途
C-SPset-mark-command设置标记C-qquoted-insert插入引用
C-abeginning-of-line移动到行首C-risearch-backward向前查找
C-bbackward-char向前移动一个字符C-sisearch-forward向后查找
C-ttranspose-chars掉换前后二个字符位置C-ddelete-char删除一个字符
C-eend-of-line移动到行尾C-vscroll-up向下滚动一屏
C-fforward-char向后移动一个字符C-wkill-region删除选定区域
C-x <scroll-left向左移动一屏C-x >scroll-right向右移动一屏
TABforward-button缩进C-yyank粘贴
C-zsuspend-frame暂停emacsC-nnext-line移动到下一行
C-kkill-line删除一行ESCESC-prefix取消前缀
C-oopen-line增加一行DELdelete-backward-char向前删除一个字符
C-pprevious-line向上移动一行C-zsuspend-emacs暂停Emacs
C-_undo取消C-lrecenter使光标所在行变为屏幕中央

2.2 帮助

表2是帮助指令列表。

表2 帮助指令

快捷键指令名称用途快捷键指令名称用途
C-h wwhere-is查看命令菜单位置或者绑定热键C-h kdescribe-key查看热键详细功能描述
C-h thelp-with-tutorial查看Emacs教程C-h cdescribe-key-briefly查看热键简单功能描述
C-h nview-emacs-news浏览Emacs新闻C-h bdescribe-bindings查看绑定热键
C-h mdescribe-mode查看编辑模式C-h C-c查看许可证信息
C-h ?help-for-help查看帮助列表

2.3 缓冲区操作

表3是缓冲区操作指令列表。

表3 缓冲区操作指令

快捷键指令名称用途快捷键指令名称用途
C-x C-dlist-directory列出当前目录C-x =what-cursor-position显示当前光标所在位置
C-x C-ffind-file查找文件C-x TABindent-rigidly强制缩进
C-x C-odelete-blank-lines删除空白行C-x blist-buffers打开另外一个缓冲区
C-x C-pmark-page全选C-x C-rfind-file-read-only以只读方式打开文件
C-x C-ssave-buffer保存当前缓冲区C-x iinsert-file插入文件
C-x C-ttranspose-lines掉换前后行位置C-x hmark-whole-buffer标记当前全部缓冲区
C-x C-vfind-alternate-file打开另外一个文件,关闭缓冲区C-x lcount-lines-page计算当前缓冲区行数
C-x C-wwrite-file保存缓冲区内容到文件C-x kkill-buffer关闭缓冲区
C-x mmail写EmailC-x 4 mmail-other-window打开新窗口写Email
C-x ssave-some-buffers保存多个文件C-x uadvertised-undo取消上一步操作

2.4 宏操作

表4是宏操作指令列表。

表4 宏操作指令

快捷键指令名称用途快捷键指令名称用途
C-x (start-kbd-macro开始录制宏C-x )end-kbd-macro结束宏录制
C-x ecall-last-kbd-macro执行上一次绑定的宏命令

2.5 窗口操作

表5是窗口操作指令列表。

表5 窗口操作指令

快捷键指令名称用途快捷键指令名称用途
C-x 0delete-window关闭当前窗口C-x 1delete-other-windows保留当前窗口,关闭其他窗口
C-x 2split-window-vertically水平分割窗口C-x 3split-window-horizontally垂直分割窗口

2.6 C语言编程模式

表6是C语言编程模式的指令列表。

表6 C语言编程模式指令

快捷键指令名称用途快捷键指令名称用途
M-abackward-sentence移动到语句开头M-eforward-sentence移动到语句结尾
C-M-abeginning-of-defun移动到函数开头C-M-eend-of-defun移动到函数结尾

2.7 SGML语言编程模式

表7是SGML语言编程模式指令列表。

表7 SGML语言编程模式指令

快捷键指令名称用途快捷键指令名称用途
C-c C-tsgml-tag插入标记C-c C-asgml-attributes插入属性
C-c C-bsgml-skip-tag-backward移动到前一个标记C-c C-fsgml-skip-tag-forward移动到后一个标记
C-c DELsgml-delete-tag删除一个标记

2.8 版本控制命令

表8是版本控制指令列表。

表8 版本控制指令

快捷键指令名称用途快捷键指令名称用途
C-x v dvc-directory列出目录下修改过的文件C-x v =vc-diff显示改动
C-x v lvc-print-log显示改动历史记录C-x v ivc-register加入文件到版本控制中
C-x v hvc-insert-headers插入版本控制信息C-x v rvc-retrieve-snapshot取某一版本文件
C-x v vvc-next-action进入提交改动状态

3 GNU Emacs扩展

3.1 Emacs Lisp语言介绍

3.2 有用的GNU Emacs扩展

3.3 写一个GNU Emacs扩展

这里我们自己动手写一个GNU Emacs扩展,实现复制一行的功能。下面是实现这个扩展的代码。

(defun copy-line (&optional arg)
 "Save current line into Kill-Ring without mark the line"
 (interactive "P")
 (let ((beg (line-beginning-position)) 
	(end (line-end-position arg)))
 (copy-region-as-kill beg end))
)
			  
将上面这段代码拷贝到.emacs中,就可以开始使用这个功能了。

4 .emacs文件

4.1 样例

;;显示时间
(display-time)
;;显示行号
(column-number-mode t)
(show-paren-mode t)
;;设置TAB宽度为4
(setq default-tab-width 4) 
;;以下设置缩进 
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-basic-offset 4)
(global-set-key "\C-m" 'reindent-then-newline-and-indent)
(setq indent-tabs-mode nil)
(setq standard-indent 4)

;;开启语法高亮。
(global-font-lock-mode 1) 

;;设置默认工作目录
(setq default-directory "/home/test/source/") 

;; 去掉滚动条
(set-scroll-bar-mode nil)

;;关闭开启画面
(setq inhibit-startup-message t) 
(setq indent-tabs-mode t)

;;不产生备份文件
(setq make-backup-files nil) 

;;设置自定义变量
(custom-set-variables
'(column-number-mode t)
'(current-language-environment "UTF-8")
'(display-time-mode t)
'(ecb-options-version "2.32")
'(mouse-1-click-in-non-selected-windows t)
'(mouse-drag-copy-region t)
'(mouse-yank-at-point t)
'(save-place t nil (saveplace))
'(show-paren-mode t)
'(transient-mark-mode t))
(custom-set-faces
;;选择小工具栏图标
(tool-bar-mode -1)
				

5 总结

6 参考资料

posted on 2010-11-03 21:01 Fucker 阅读(826) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Fucker Powered by: 博客园 模板提供:沪江博客