* 前言:全书的脉络
第一章 Emacs的基本概念:Emacs的启动核对文件操作、在线帮助系统
第二章 文件编辑:光标移动、复制粘贴、撤销修改命令;初级的定制
第三章 查找和替换:查找替换、单词简写、拼写检查
第四章 使用编辑缓冲区和窗口:多编辑缓冲区、书签
第五章 Emacs工作环境:shell操作、对文件和目录进行操作
第六章 电子邮件和Usenet新闻:Gnus新闻阅读器
第七章 Emacs的英特网工具箱:远程访问别的计算机、ftp功能检索文件、
浏览万维网
第八章 简单的文本排版和特效编辑:基本的文本操作、图形模式和大纲模
式
第九章 用Emacs设置排版标记:TEX、LATEX和HTML等标记语言
第十章 Emacs中的宏:用宏指令简化重复工作
第十一章 对Emacs进行定制:各种定制
第十二章 程序员的Emacs:Emacs在程序设计环境方面的有关功能
第十三章 Emacs LISP程序设计:Emace LISP的基本概念
第十四章 Emacs编辑器和X窗口
第十五章 Emacs下的版本控制:文件版本控制的VC模式
第十六章 在线帮助
* 第一章 Emacs的基本概念
** Emacs简介
它可能不是最好的但是它是最有用的。
人们说Emacs功能强大的原因:它远不仅是一个文本编辑器,它是一个能够
改变你工作方式的完备的操作环境
** 理解文件和缓冲区
Emacs并不是对某个文件本身进行编辑。事实上,它们会把文件内容放到一
个临时性的缓冲区里面,然后再对缓冲区的东西进行编辑。
** 编辑模式
Emacs有各种各样功能各异的编辑模式模式的真正含义不过是Emacs对当前
的文本编辑工作更"敏感"而已。
一个编辑缓冲区只能有一个主模式。退出一个主模式的方法就是进入另一个
主模式。
再租模式之外还有副模式(minor mode)。副模式的概念是emacs在编辑的时
候的某些行为。
在这里比较特殊的就是大纲模式它既可以当作主模式单独使用,又可以当
成副模式作用于别的主模式里面
** 启动emacs
** emacs的编辑画面
状态栏:(**)表示文件自从上次保存以后又被修改过,否则显示(--);其次
是缓冲区的名字;然后如果在文件开头显示Top,文件尾部显示Bot,在其他
部分显示文件的百分比%;然后就是行号和列号;最后是当前的主模式和副模
式的名称。
** X技巧:X窗口系统下的Emacs画面
** Emacs命令
Emacs的每一个命令都有一个正式的名字,它们实际上是Emacs内部LISP程序
的名字。由于这些名字都比较长,所以我们需要一些能够简化命令输入的
方法。
命令和组合键之间的联系被称为"绑定":
*** 最常用的命令被绑定为 C-n 的形式(其中n是任意字符)
*** 次常用的命令被绑定成为 M-n 的形式。
*** 其他常用的命令被绑定为 C-x something 的形式。somthing 可能是一
个或者多个字符,也可能是别的命令组合。
*** 某些特殊命令被绑定为 C-c something 的形式。这些命令通常和特殊
的编辑模式相关比如图形模式或邮件模式。
*** 有些没有绑定或者无法绑定形式的命令输入方法是直接输入它的名
字:M-x long-command-name RET
** X技巧:使用下拉菜单
** 打开一个文件
命令是 C-x C-f 。Emacs提示输入一个文件名,输入新建或者查找的文件,
回车即可。
** 如果读入了错误的文件
遭到正确文件最简便的方法是按下 C-x C-v 。命令的意思是"读取另一个文
件来取代刚才读入的那一个"。
** Emacs的名称自动补足功能
这是Emacs一个很有用的功能自动完成。你所需要做的事情仅仅是把Tab键
按的稍微勤快些。
** 插入和追加文件
移动到相应的位置,按下 C-x i 即可。
** Emacs如何设定默认目录
** 保存文件
按下 C-x C-s 即可。
有一个小技巧在这里,如果 C-x C-s 时发生了死机现象,这时就需要将
C-s 和 C-q 当作流控制字符来使用:在这里 C-s 的意思是"停止接受输
入";而 C-q 相当于重新启动这次会话。
C-x C-w 也有同样的作用,只不过这个和"保存缓冲区"有所不同,这个命令
默认你需要改文件名。
** 退出Emacs:C-x C-c
** Help菜单
C-h 和 C-h C-h
* 第二章 文件编辑
** 光标的移动
光标移动最简单的办法就是按方向键,但是为了手不离开键盘区有以下快捷
键:
C-p 上一行 C-n 下一行 C-b 前一个字符 C-f 后一个字符
** 移动光标的其他方法
M-b 左移一个单词 M-f 右移一个单词
C-a 一行的开头 C-e 一行的结束 M-a 一句话的开头 M-e 一句话的结尾
M-{ 光标上移一个段落 M-} 光标下移一个段落
如果文件里面有分页符,可以通过敲入 C-x [ 来移动到上一页, C-x ] 移
动到下一页。如果文本没有分页符,那么Emacs会把缓冲区当成一页,以上
两个命令分别对应缓冲区的开头和结尾。
文本模式的分页符是一个换纸进页的字符,作用是告诉打印机进入到下一个
打印页。如果想要在文本模式下在文件里面插入分页符,可以按下 C-q C-l
** 把光标一次移过一个 (或者多个)屏幕画面
C-v 下翻一页 M-v 上翻一页
C-< 文件开头 C-> 文件结尾
** X技巧:使用卷屏条
** 命令的重复执行
ESC n 或者 C-u n 都是把命令执行n次。所不同的是C-u即使不带参数也会
重复执行,C-u 执行4次,C-u C-u 执行16次,即重复使用可以按照4的幂次
来重复执行随后的命令
** 重新绘制屏幕画面
C-l 重绘屏幕、并且把当前行移动到屏幕中央
** Emacs命令与你的键旁
许多Emacs命令可以通过键盘上的标准按键来快速输入。但是建议还是使用
这些标准的Emacs命令,因为他们在任何一种键盘上都能使用 。
** 文本的删除
在删除命令之前,先说说撤销:C-x u 或者 C-_
Emacs有很多文本删除的方法。最简单的就是键盘上面的DEL键,他的左右时
删除紧靠光标右侧的那个字符。Backspace则是删除光标左侧的字符。
C-d 删除光标所在处的字符 M-d 删除光标所在单词
C-d 删除一行。一般说来 C-k C-k 才能完整的删除一行。第一个用于删除
空行。
** 恢复已经删除的文本
在emacs中delete和kill不是一个东西。所有kill的东西被保存在一个叫做
kill ring的地方,如果连续kill的东西会被当成一个整体一起放在kill
ring里面。
kill ring中的东西包括:用 C-k 删除的所有东西;用 C-w 删除的所有东
西;用 M-w 复制的所有东西。
C-y 命令可以把kill ring中最上面的一个恢复出来。
M-y 告诉Emacs"恢复的不对,我需要上一个"呵呵,是一个ring嘛
** 文本块及其编辑操作
Emacs的一个简单办法:用标记文本的方法把打算删除得东西定义为一个区
域,这个标记出来的区域就叫做"文本块(region)"
把光标移动到文本的开头,按下 C-_ (C-spa),然后把光标移动到region的末尾,
这样就可以选中了中间区域。(插入点的精确位置是当前字符之前)
C-x C-x 作用是交换插入点和文本标记的位置。
应该养成一个好习惯:在对文本块做删除操作之前先用 C-x C-x 检查一下。
C-w 删除文本块 M-w 仅仅复制文本块
以下有几个快捷的方法:
M-h 标记一整段 C-h h标记整个buffer (有分页) C-h C-f 标记整页
** X技巧:用鼠标标记文本块
** 恢复早先的删除错误
C-y 可以回复最新删除的文本,M-y 回复上一次,继续 M-y 则是继续恢复
上一次
** 段落重排
即auto-fill-mode中,Emacs可以添加自动换行符,这样文本看起来就比较
漂亮。
比较遗憾的是这只能在第一次编辑中实现,在以后的编辑中文本会变的参差
不齐。
** 编辑技巧和快捷键
*** 交换位置
把前后两个字符顺序打错了:把io输入成了oi,在i的地方按下 c_t ,则变
成了正确的顺序io。
交换两个词的方法:把光标放在两个词中间,按下 M-t 。
交换两个文本行的方法:放在第二个文本行任意位置,按下 C-x C-t 。
当然,直接输入命令比如transpanse-sentences就可以实现交换两个句子、
两个段落的功能。
*** 改变字母大小写(这个功能我不需要……)
*** 文本改写模式
按下Insert就好了
*** 命令终止和修改的撤销
C-g
*** 用文件内容取代编辑缓冲区的内容
即全部放弃,恢复到存盘时的样子: M-x revert-buffer RET
*** 返回文件某个以前的版本
把原来备份的文件名改成当前文件名就好了……
*** 恢复丢失的编辑修改
(断电等……) M-x recover-file RET
** 对Emacs进行定制
呵呵,编辑 .emacs.el 就好了!
好多内容,先到网上看看别人的.emacs,如果还想用更加高级的功能去看看
emacs LISP 好了。
* 第三章 查找和替换操作
** 查找操作
有很多种查找的方式:简单查找、递增查找、单词查找、正则表达式查找、
递增正则表达式查找等等。可以往前查找或者往后查找。
Emacs默认查找时不区分大小写,只有一种情况例外,那就是当你要查找的
词语中含有大写字母——Emacs认为你愿意花心思输入大写字母一定有你的用
意。
对于替换,Emacs有:简单的查找替换、查询-替换、正则表达式替换。
一般说来用熟悉一两种就好了。
** 递增查找
按下 C-s (往后) 或者 C-r (往前)输入要查找的东东,按下回车键就
就停在想要查找的东东那里。如果当前这个不是想要找的那个怎么办?连续
按下 C-s 或者 C-r ,直到找到需要的那个为止,按下RET。
如果不想输入查找字符串,可以按下 C-s C-w ,可以把光标位置到下一个
标点或者空格之间的文本都复制到查找字符串里面。如果想要把光标位置到
行尾之间的文本都复制到查找字符串里面,就要使用 C-s C-w 。C-s M-y
可以把kill ring里面的文本复制到查找字符串里面去。
C-s C-s 是重复刚才的查找。
** 简单查找
C-s RET 或者 C-r RET ,然后输入查找项就好了。
** 单词查找
如果在查找一个短语的时候,明明文件里面有这样的短语,可用递增查找却
找不出来,可以尝试单词查找。
C-s RET C-w 或者是 C-r RET C-w
在英文论文写作中,单词查找是最需要的功能。
** 查找和替换操作
*** 基本查找与替换操作
只想把文件里某个字符串都换掉的时候,只需要一个简单的命令 M-x
replace-string RET 然后输入要被替换的字符串、输入替换后的字符串即
可。
*** 查询-替换操作
M-% 即进入查询-替换,mini-buffer提示"Query replace:",输入查找字符
串并按下回车键。当找到一个位置时:
**** spa 或者 y :替换,前进到下一个为止
**** del 或者 n :不替换,前进到下一个为止
**** . :在当前为止做替换后推出
**** , :替换并显示替换情况 (按spa或y才进入到下一个位置)
**** ! :对后面的内容全部替换,不再询问
**** ^ :返回上一次进行替换的位置
**** RET 或 q :退出
**** C-r :进入递归编辑状态
**** C-w :删除此处内容并进入递归编辑状态
**** ESC C-c :退出递归编辑,继续查询-替换
**** C-] :推出递归编辑状态和查询-替换操作
*** 查询-替换(以及其他复杂命令)的重复执行
这是为了不小心从某个复杂命令中退出了,而想重复这条复杂命令的做法。
按下 C-x ESC ESC 即调出刚刚输入的命令,如果不是想要的 M-p 就好了,
如果过了头,可以用 M-n 后退。
*** 递归编辑
在进行查询-替换操作的时候,几乎不可避免的会发现还有一些别的地方需
要修改,幸好Emacs已经想到了这一点。"开始一次递归编辑"的意思是,暂
时放下手中的查询-替换操作去做一些别的修改,当退出编辑状态的时候,
查询替换将从刚才暂停的地方继续。
C-r 即是在查询替换中的递归操作。Esc C-c 即让Emacs退出递归编辑。
C-] 即是彻底放弃递归编辑和查询-替换。
对于高级的Emacs User来说,可以随时开始一段递归编辑,只需要 M-x
recursive-edit RET 就好了。只不过每多一个递归层,把自己搞昏的可能
性就多一分……
*** 查询操作中的字母大小写问题
通常Emacs足够聪明去处理这方面的问题,比如如果输入中有一个以上的大
写字母Emacs会尝试去精确匹配。但是我们仍然可以手工控制这一切。如果
需要控制,可以用M-x去自动执行命令,也可以加入到.emacs中
;要求精确匹配
(setq-default case-fold-search nil)
;替换时不改变大小写情况
(setq-default case-replace nil)
**查找和替换中的正则表达式
一些正则表达式中的字符
*** ^ 匹配行首
*** $ 匹配行尾
*** . 匹配任意单个字符(类似文件名中的?)
*** .* 匹配任意(零或以上)个字符(类似文件名名中的*)
*** < 匹配单词的开头
*** > 匹配单词的结尾
*** [] 匹配方括号中的任意一个字符,比如[a-z]匹配任意一个字母
表字符
如果想对 ^ $ . * [ ] 或者其他特殊字符进行查找,显然不能共这些字符
本身,必须在它们前面加上一个反斜线 。比如查找"["就必须查找"["
使用正则表达式来进行查找:
M-C-s 向后增量使用正则表达式 M-C-r 向前增量使用正则表达式
M-C-s RET 同上只是不增量 M-C-r RET 同上不增量
M-x query-replace-regexp 查询-替换一个正则表达式
M-x replace-regexp 无条件对一个正则表达式进行全局替换
** 拼写检查
(暂时还用不到。好像很有趣的样子但是我更加经常写中文……留着以后补充
吧)
** 简写模式
很好玩的东东。有空再搞。维护一个简写词表也是蛮好玩的。
* 第四章 使用编辑缓冲区和窗口
** 文件、编辑缓冲区和窗口
Emacs里面的一切编辑操作都发生在编辑缓冲区buffer里面。虽然编辑缓冲
区往往会有许多其他方面的用途,但是它通常是某个文件的工作副本。
** 同时使用多个编辑缓冲区进行工作
缓冲区之间的切换 C-x b 。同 C-x C-f 作用差不多,同样可以打开新的
buffer,区别在于不用指定文件名。
** 多个缓冲区的保存
保存单个缓冲区 C-x C-s 保存所有的缓冲区 C-x s
保存所有缓存区的时候,Emacs会依次询问是否保存某个文件,y保存,n不
保存,!无条件保存所有,.只保存某一个其他的不要,q退出。
在保存某个缓冲区之前,可以 C-r 看看它的内容,C-c 退出。
** 编辑缓冲区的删除
删除一个缓冲区的方法是 C-x k
删除一堆缓冲区可以输入 M-x kill-some-buffers
** 编辑缓冲区的重新命名
M-x rename-buffer
弄错文件名字是一个很常见的错误,如果发现 C-x C-f 找到的文件不对,
可以使用 C-x C-v ,用新的文件来替代它。
** 只读编辑缓冲区
C-x C-q 把编辑缓冲区设置为只读性质。重复组合键恢复可写性质。
** 使用窗口进行编辑
*** 创建上下排列的窗口 C-x 2
*** 创建左右排列的窗口 C-x 3
*** 在窗口之间移动 C-x o (o stands for "other")
*** 窗口的删除
删除一个窗口意味着它将不再出现在屏幕上,但是buffer并没有被kill掉,
用 C-x b 依然能够过去。
C-x 0 删除正在编辑的窗口 C-x 1 将自己所在的窗口最大化,删除其他
*** 调整窗口的大小尺寸
C-x ^ 增高窗口 C-x { 水平搜索窗口 C-x } 水平扩宽窗口
C-x - 收缩窗口只有缓冲区那么大 同样 C-x + 也是同理 (其实我不懂……)
*** 窗口大小的上、下限
Emacs变量 window-min-height 和 window-min-width
*** 对窗口进行操作的快捷命令
C-x 4 f 另开一个窗口插在并打开文件
C-x 4 b 另开一个窗口打开另一个缓冲区
*** 对比两个窗口中的文件
*** 于编辑缓冲区清单相关的操作
C-x b 进入编辑缓冲区以后,移动到标题前,按下d或者k ,大写D将出现在
某个buffer前面。完成标记并且按下X以后,他们会被真正的删除(当然指
的是缓冲区删除)
u 撤销标记 s 存盘操作 ~ 不自动存盘 % 改变只读状态
** 在文档中使用书签
*** 书签的设置
如果想要在光标位置设置一个书签,只需要 C-x r m
书签使用非常灵活,书签名字可以有空格,如果不起名字Emacs会给文件名
加上() 变成书签的名字。
*** 移动到书签指示的位置。
C-x r b 就可以了。这个功能可能会使用户放弃使用 C-x C-f ……每次都可
以很方便的跳转到想要的文件上。
*** 书签的重命名和删除
M-x bookmark-rename 然后按照提示输入原来书签的名字、新的书签的名字
就好了。很方便吧!
M-x bookmark-delete 然后输入书签名字就可以删除书签。
*** 与书签清单有关的操作
C-x r l 就可以进入书签清单,然后编辑方法和缓冲区列表类似
** 临时性的挂起Emacs
C-z 就可以了。
** 使用多个X窗口进行操作
* 第五章 Emacs工作环境
** 在shell编辑缓冲区里执行UNIX命令
Emacs的一个重要特点之一是它能够在一个编辑缓冲区里运行一个UNIX的
shell,只要进入shell编辑缓冲区,就可以在Emacs里完成各种常见的UNIX
工作
*** 一次执行一条UNIX命令
M-! 在Emacs中输入一条shell命令
C-x 1 关闭执行窗口
C-u M-! 把命令的执行结果直接放到当前编辑缓冲区。
*** 使用shell模式
M-x shell 启动shell缓冲区
有一点要注意的是,由于shell中通常"停止某个作业"是 C-c ,而 C-c 被
Emacs认为是Emacs命令,所以"停止某个作业"必须按下 C-c C-c 才行。
M-p 把最后一个命令放在shell提示符处。连续按可以找回以前的
M-n (个人认为没有什么作用,M-p就好了)找回更加早的命令
C-c C-o 自动删除上一个命令的执行输出,C-y可以找回kill的东东
*** shell的初始化
Emacs根据变量explicit-shell-file-name来打开默认shell,接着查看一个
eshell的UNIX环境变量。如果想运行一个特定shell,在.emacs中加入
(setq explicit-shell-file-neme "/bin/zsh")
*** 远程shell的问题
加入UNIX命令 stty-echio nl 来解决显示混乱的问题
*** 用shell模式预防安全隐患
在.emacs中加入一些语句来使password不显示
** 文件和目录操作
Dried模式(directory editing mode,目录编辑模式)是Emacs最引人注目的
功能之一。它提供对文件目录编辑的有效手段。
C-x C-f 目录名 自动进入Dried模式对目录进行编辑
C-x d 启动Dried
s(Dried下) 自动排序,最新的文件放在最顶部,再次按下恢复
spa C-n n 下一个文件
del C-p p 上一个文件
*** 查看和编辑文件(under Dried)
v 进入view mode查看文件内容,只能看,不能改
C-c q 退出到目录的文件清单
f 编辑文件
*** 文件的删除、复制、重命名操作
d 标记文件删除
u 取消删除标记
# 给所有自动保存文件(#*.*#)加上待删除标记
~ 给所有备份文件加上待删除标记
D 立刻删除文件
C(必须大写!) 复制文件
nC(比如3C) 连续复制n个文件
R 重命名某个文件
g 刷新文件列表
*** 文件的压缩和解压缩操作
Z Emacs对文件进行压缩或者解压缩操作
*** 对文件进行比较
标记第一个文件,第二个文件上按 = ,将会调用diff对文件进行比较
M-x 对文件和其备份文件进行比较(这个比较智能……)
*** 在文件上运行UNIX命令
!(在文件名前) 对文件下达一个shell命令,比如sort,diff等
*** 对文件组进行操作
Dried的真正强大之处在于他能够同时对多个文件进行操作
**** 选取文件
m 对文件进行标记,文件名前加上了*
nm(n是数字) 对连续n个文件进行标记
M-del 删除所有标记
**** 用正则表达式来选取文件
在Dired里面使用正则表达式来选取文件,方法是,先输入 % ,在用 m 来
标记文件,或者再用d给文件加上待删除标记。
需要注意的是,这里输入指令是这个样子的 %-m 或者 %-d ,仅仅 % 是没
有效果的。
**** 文件组上的操作
+ 创建一个目录
R 把标记的文件移动(重命名就是一种移动……)
在允许对文件组进行操作里面还有一些更令人感兴趣的东西,其中一条就是
只需要一条命令就能对它们的内容进行全面的查询-替换。具体步骤是:先
标记所有需要操作的文件,然后按下
Q Emacs依次进入各个文件进行查询-替换
*** 简单的目录清单
C-u C-x C-d 给出一份详细的目录文件清单
C-x C-d 给出一份简单的目录清单
这些目录清单都是临时性的,对它们进行的任何操作和修改对底层的文件结
构不会有任何影响。
** Emacs中的打印操作
(忽略之……)
** 用Emacs查阅UNIX的在线文档
M-x man 把排版好的使用手册页放入一个新的缓冲区
M-x manual -entry RET UNIX-command-name RET 查看某命令
以上的做法就是能够随心所欲的翻阅和查看,并且永远能够显示出整齐的文
本
** 时间管理工具的使用
Emacs说不定会成为最离不开的个人信息助理。
Emacs的日历和日记功能要大大优于它们的UNIX对手。它的日历功能可以同
时显示3个月,他的日记功能可以显示每天的活动和日程安排记录
*** 显示时间
在.emacs中加入 (display-time) 就好了
*** 显示日历
M-x calendar 在emacs中显示日历
. 移动到今天
g d 到达某个特定的日期
o 把指定月份放在日历画面中间
C-f 移动到后一天 C-n 移动到前一天
C-n 下星期同一天 C-p 上星期同一天
M-{ 上个月 M-} 下个月
C-x [ 上一年 C-x ] 下一年
C-v 前卷三个月 M-v 后卷三个月
C-a 一星期的开始 C-e 一星期的结束
M-a 一个月的开始 M-e 一个月的结束
M-< 一年的开始 M-> 一年的结束
C-x < 前卷一个月 C-x > 后卷一个月
***显示节假日
a 显示当前日期中的所有节假日
h 显示今天是否是节假日
** 日记功能的使用
日记功能是和日历功能,用于安排日程
*** 创建一个日记文件
先用 g d 移动到某个特定的日期,然后
i d (insert diary) 插入一条日记条目
注意如果日历的条目不止一行的话,在下一行的开头留出空格,让Emacs知
道它是一个续行
i w 每周一次的事件
i y 每年一次的时间
i c 每隔若干天重复的事件
先用标记的方法选取一段时间,然后
i b 就可以定义这一段时间内的事件
*** 显示日记条目(在日历画面下)
d 显示当天的日历条目
s 显示所有的日历条目
在.emacs里面加上(calendar)每次启动时启动日历,加入(diary)显示日
历。两者不能同时显示
如果想要把有日记条目的日期在日历上标记出来,那么在日历上面按
m 标记有日记的日历条目
u 去除这些标记
//以下两条是我的Emacs设定
pC 显示当天的阴历日期
S 显示当天的太阳升起和降落的时间
** 用好Emacs工作环境
在接下来的两章中我们会看到工作不用离开Emacs就能够很好的完成。
* 第六章 电子邮件和Usenet新闻
** Emacs的电子邮件功能
** 用Emacs发送邮件
C-x m 进入到mail缓冲区,撰写邮件
C-c C-c 撰写邮件完毕,发送邮件
C-c C-s 发送邮件但是仍然留在邮件编辑缓冲区里面
*** 从窗口或者窗格里发送邮件
C-x 4 m 新开一个mail的窗口显示
C-x k 删除邮件,关闭窗口
*** 对邮件内容进行拼写检查
*** 把邮件抄送给其他收信人
*** 把邮件密抄给其他收信人
*** 把邮件发送到一个文件
*** 在邮件里插入一个文件
*** 给邮件加上签名
(是在看的是索然无味,还是跳过这一章算了……)
* 第七章 Emacs的因特网工具箱
(草草浏览,略过……)
* 第八章 简单的文本编辑和特效编辑
** 文本的缩进
*** 制表符的使用
按下tab就好了……
*** 缩进整个段落
对整体缩进的段落进行重排,先定义整个段落为一个文本块,然后
M-x fill-individual-paragraps RET
*** 设置制表位
M-x edit-tab-step
*** 把制表位转换为空格
由于制表符没有一个通用的标准,所以有的时候——比如在打印时、或者换了
一个系统时制表符有可能引起一场灾难。
Emacs考虑到了这一点,在编辑时可以很方便的使用制表符,一旦编辑结束,选
取全文为文本块,输入命令
M-x untabify 把空格转换为制表符
注意!!!不能对任何一个makefile进行上述操作!
*** 缩进前导字符串的使用
使用缩进前导字符串(fill prefix)——即Emacs自动放到每行输入文本开头的
一个字。
缩进前导字符串最好是在自动换行模式下使用。
加入开始对一个备忘录文件开始进行缩进处理。在文件的第一行,手动输入
缩进值——比如说八个空格。按下
C-x . 在每行文本开头自动进行缩进处理
假设我们在第一行的开头输入的是一个string,然后进行上述操作……那么我
们得到的文本每行的开头都是那个string
怎么让它这个疯狂的东西停下来?没有太聪明的办法,只能把光标放在左边
界上,然后继续 C-x . ……
如果需要去掉先前的缩进前导字符重新排版,需要先去掉以前的缩进前导字
符,重新定义一个新的,然后按下 M-q 。命令简单但是却是我们需要的。
** 文本缩进模式
如果大量使用锁紧,就应该考虑使用Emacs的文本缩进模式(indented text
mode )。
进入文本缩进模式的同时必须进入自动换行模式。
其实这个模式知道就好了……自己tab两下就懂了
*** 文本缩进模式中的制表符
*** 对文本块进行缩进
如果已经在没有缩进的情况下录入了文本,现在又想对它们进行缩进,该怎
么办呢?如下步骤
*** 进入文本缩进模式
*** 移动到准备缩进的文本块末尾,设置文本块标记
*** 移动到准备缩进的文本块开头,用空格或者tab设置好缩进距离
*** M-C- 重排文本块对整个文件进行缩进
*** M-q 对文本块进行段落重排
//在这里我发现有一个命令非常有效,就是当auto-fill-mode出现混乱的情
况下,先标记整个部分,然后 M-x fill-individual-paragraphs RET
** 文本的居中
(靠!Emacs居然崩了……刚才写了一堆东西没了……看了要自己编译下才可靠)
M-s 把光标所在行居中
M-S 把光标所在段落的每一句
M-x center-region 把当前定义的文本块居中
** 插入分页符
** 矩形编辑
先选好块,注意的就是右下角必须多一个空格,然后
C-x r k 删除一个矩形并保存在矩形kill ring
C-x r d 删除一个矩形块但不保存
C-x r y 插入kill ring中的矩形
C-x r c 清除矩形kill ring内容,不保存
C-x r o 插入选中块那么大的空白块
M-x delete-rectangle擦黑板~~就是擦除并留白
** 绘制简单的图形
M-x edit-picture 进入绘图模式
C-c C-c 推出绘图模式
C-c ^
C-c ` ^ C-c '
^ /
^/
C-c< <<<<<<<<>>>>>>>>> C-c>
/|
/ |
|C-c
C-c/ |
C-c .
果然……我画图还是比较丑。这个模式让画一些简单的框图变得容易。比如说
-------------| |-------------- |--------------
| | | | | |
| 开始学习 | ---->>| 开始锻炼 ---->>| 然后睡觉... |
| | | | | |
| | | | | |
|-------------- --------------| --------------|
*** 图形模式的编辑操作
(好麻烦……有空慢慢学吧……反正不是什么重要的东西,忽略之)
** 大纲模式
*** 进入大纲模式
M-x 进入大纲模式
C-c C-n 移动到下一个标题或子菜单
C-c C-p 上一个标题或子菜单
C-c C-f 下一个同级菜单
C-c C-b 上一个同级菜单
C-c C-u 移动上一级菜单
*** 文本的显示和隐藏
大纲模式最重要的功能自已就是他能够有选择的隐藏和显示文本的不同部分,用
大纲模式查看一分厂文档的布局安排是它最精彩的功能。——把标题以外的东西全
部都隐藏起来,整个文本一目了然。
C-c C-t 把除了各级标题以外的正文都隐藏起来
C-c C-a 查看所有!这个和前一个是对整个大纲进行操作的
C-c C-d 把某级菜单隐藏起来
C-c C-s 把某级菜单显示出来
C-c C-o 把除了当前正在编辑以外的东西卷起来。这很重要
*** 文本被隐藏时的操作
要整体移动大纲模式下的东西,必须被移动文本的双方都在大纲模式下
*** 使用大纲副模式
M-x outline-minor-mode 使用大纲副模式。
在大纲副模式中,大纲命令必须都加上
C-c C-o 大纲副模式前缀
*** 对大纲模式进行定制
大纲模式是由一个名叫 outline-regexp 的变量进行控制,这个变量的只是一个
正则表达式。这个表达式的作用是匹配任何一个表体的开头部分。
*** 大纲模式的其他命令
C-c C-l 对某级标题只留下它和其下的标题
C-c C-k 显示某标题的正文及其全部下级小标题的正文(貌似
没用的说……)(恩,补充一下,还是有用的。显示的是“标题正文”)
C-c C-j 显示某标题的下一级小标题(不包括正文)
* 第九章 用Emacs设置排版标记
** 注释
这一章所介绍的东西和第十二章所介绍的 c mode 已经 fortran mode 等程序设
计语言编辑模式都有一个共同特点:即允许使用注释。按下
M-: 插入正确的注视语法
** 设置toff和nroff排版标记
(忽略之)
** 设置 tex 和 latex 排版标记
tex 和 latex都是组编辑模式。
M-x tex-mode RET 进入tex模式里面
M-x latex-mode RET 进入latex模式里面
*** 括号的配对出现
Emacs能够帮助生成配对括号
C-c { 将在文本中加入一对配对大括号并正确放置光标
C-c } 跳出花括号当前层次
M-x validate-tex-buffer RET 将在整个缓冲区范围内检查是否有尚未配对的各
种括号。
*** 引号和段落分隔
在tex模式里面输"入将使Emacs正确的输入``''这实在是一个很聪明的做法。如
果确实需要输入一个",可以
C-q " tex-insnset-quote
C-j 可以正确插入tex和latex的段落分隔符(2 RET)
上一个命令还会同时检查前一个段落里面有没有不配对的括号
*** 注释
M-: 插入正确的注释
*** 文本的排版和打印
C-c C-b 对整个编辑区进行排版处理
C-c C-l 把排版处理的结果显示在屏幕上
(打印略……)
*** latex模式和tex模式的差异
C-c C-e letex将自动插入一对
begin{}
end{}
并且光标房子在begin的括号中,同时输入!!
** 编写html文档在Emacs中编写
html有几个增值模式可以使用,包括 html 模式,html-helper 模式,html菜单
模式, sgml 模式……(我已经晕了……)
以下将介绍的是 html-helper 模式。
** Emacs的 html-helper 模式
*** 启动 html-helper 模式
M-x load-file RET
然后Emacs会询问要加载的文件,输入html-helper-mode.el的完整路径,然后进
入模式就好了
(没什么兴趣了……以后用到再看)
* 第十章 Emacs中的宏
** 什么是宏
在Emacs里面,宏是一组被录制下来的按键动作,可以反复的使用。我们可以使
用宏
(1)给文本设置排版标记
(2)把某个编辑缓冲区里的标题做一份大纲,复制到另外一个编辑缓冲区里面
(3)做一些查询替换无法应付的查找加替换类型操作
(4)建立索引目录
(5)重新对冲另外一个应用软件里面到进来的文件进行排版
(6)把表格从一种格式套用为另外一种格式
(7)用一个命令来完成某个程序的编译、运行、测试
** 定义宏
C-x ( 进入宏模式开始一段宏的录制
C-x ) 离开宏模式,停止录制
在录制宏的过程中,命令还是会正常执行的。也就是说,宏录制时输入的任何内
容都将被看成一个正常的命令并被执行。
C-x e 重新执行刚才录制的宏
按下一次以后,以后只要继续按e就可以继续重复执行
*** 技巧:如何创建良好的红
所谓良好的宏是那些能够在任何需要的场合都能够正确工作的宏。因此,应该在
宏里面使用绝对命令。
一般说来,好的宏是由三个部分组成的:
**** 找到准备开始工作的地方(通常利用查找操作来实现)
**** 对文本进行预订的编辑处理
**** 做好下次循环的准备工作
** 向现有的宏里增加编辑命令
C-u C-x ( 执行一次宏,在尾部等待
C-x ) 结束新的实例
** 命名并保存宏
如果需要“永久性的”宏,步骤如下
*** 录制宏
*** 输入 M-x name-last-kbd-macro RET 。
在进行这样的操作以后,Emacs会记住这个用。如果想使用这个宏,输入命
令M-x name就好
*** 如果想把这个宏定义永久的保存起来,必须把宏插入一个文件
用 C-x C-f filename RET 命令打开那个准备把宏定义插入到其中的文件,然后
用M->移动到最末尾,
*** 保存宏到文件
M-x insert-kbd-marco RET 就把宏的LISP代码插入其中了。
*** 按下 C-x C-s 保存那个文件。
** 执行一个已命名的宏
我的做法是把要使用的宏全部保存到.emacs.d目录下的_emacs_macro.el文件中
去,然后让.emcas每次都自动加载这个文件。记住自己定义的宏的名字,然后
每次
M-x macro_name 执行自己定义的宏
** 建立复杂的宏
*** 暂停宏的执行以等待键盘的输入
这个相当于对宏说,“等等,我要做点事情呢”的一个递归操作
在宏定义的过程中
C-u C-x q 表示插入一个递归操作
M-C-c 退出这个递归操作
*** 在宏里面插入一个查询
(好烦……忽略之……)
* 第十一章 对Emacs进行定制
** 键盘的订制
设定方法有好多,简单的掌握就好了
通用的方法是
(global-set-key "hotkey" 'command_name)
其中command_name就是Emacs中的LISP函数名了
hotkey的就是需要的快捷键,用几个例子说明一下:
C-a C-a
M-a M-a
C-M-a C-M-a
C-xa C-x a
C-A C-A(也就是C-s-a)
一个键绑定到.emacs里面以后,最后用C-x C-e来重新载入.emacs
在这里我发现了一些绑定的方法。比如f1 f2等的功能键,如果用的是"C-"等的
方法无论如何都搞不定……我是说在我这里搞不定。
与使用两种方法:
一种是 [(f1)]
还有一种是 (kbd "<C-f1>")
*** 特殊键
更复杂的键盘定制任务就是把命令键绑定到终端的特殊键上。
我们需要做的第一件事就是——找出终端上的特殊字符都会产生哪些字符代码
我们如果需要这些特殊键产生的特殊代码,方法是:
先进入到一个空白的缓冲区中,比如*scratca*,然后按下
C-q 显示特殊字符的预设键
再按下特殊字符,这样特殊字符就会出现真面目
(当然,在我这里很多特殊键都搞不定……)
** 终端支持
(现在与我没有什么关系……)
** Emacs的LISP程序包
C-h p 查看自己的电脑上有哪些程序包可用
**自动模式的定制
* 第十二章 程序员的Emacs
** 格式
M-j 回车并且到下一行产生适当的缩进
C-M- 对文本块的每一行都进行缩进(段落重排)
M-m 光标移动到当前行的第一个非空白字符上
M-^ 把当前行合并到上一行去
M-; 产生通用注释
M-j 到下一行产生注释
M-x comment-region 把块注释掉
M-x kill-comment 消除注释
** c和c++模式
*** 移动命令
M-a 当前语句的开头
M-e 当前语句的结尾
M-q 把注释进行段落重排
M-C-a 移到光标所在函数开头
M-C-a 函数结尾
M-C-h 把整个函数选取为文本块
C-c C-q 对整个函数进行
C-c C-u 移动到当前预处理器条件的开始位置
C-c C-p 移动到上一个预处理器
C-c C-n 移动到下一个预处理器
*** 对代码的缩进样式进行定制
M-x C-set-style tab 从中选择一个就好了
*** c和c++模式的附加功能
这里有两个很有意思的新功能,叫做“自动开始新行”和“饥饿的删除键”:
"自动开始新行"就是每次按下;或者{时正确的移动到下一行的缩进处
"饥饿的删除键"就是每次删除空格时删除所有。
我在_emacs_mode.el中加入相应语句使之自动开启
*** c++模式的差异
c++模式中为了避免输入:自动缩进的麻烦定义了一个附加命令C-c : 来输入::
*** etags
从原理上讲,etags不过是一个面向多文件对象的搜索工具。使用方法很简单,
先用etags建立一个函数标签表,然后
M-x visit-tags-table RET 让Emacs知道这个函数
M-. 查找某个字符串的函数
如果光标正好在某个函数名上,Emacs会自动去查找这个函数的定义
M-, 如果有几个同名函数查找下一个
M-x tag-search 输入正则表达式查找全体文件里的东东
M-x tag-query-replace 全体文件查找-替换
C-u M-x tag-query-replace 进行精确匹配的查找替换
M-x list-tags RET 显示所有函数
** LISP模式
***共有三种LISP模式。分别是
(1)emacs-LISP-mode,用来编辑Emacs LISP代码.el
(2)用来编辑供其他LISP系统实用的LISP代码.l或者.LISP
(3)用来编辑和运行Emacs LISP代码
这三种编辑模式对S-表达式的支持。(所谓S-表达式是指正确的LISP表达式,其
中list是S-表达式的特殊形式),以下是关于S-表达式的命令
M-C-b 移动到上一个S-表达式
M-C-f 移动到下一个S-表达式
M-C-t 交换光标签后两个S-表达式
M-C-@ 选取S-表达式为文本块
M-C-k 删除光标后面那个S-表达式
M-C-n 移动到下个列表
M-C-p 移动到上个列表
M-C-d 向前移动,进入下一级括号层次
M-C-u 向后移动,退出当前括号层次
M-C-a 当前函数的开头
M-C-e 当前函数的结尾
M-C-h 标记整个函数为文本块
在LISP编辑模式中按下 M-; 就可以输入注释,但是需要注意的是,为了避免
Emacs对格式的设定,所以当注释独占一行的时候,最好使用多于一个的 ;
*** Emacs LISP模式
Emacs LISP模式是为了运行Emacs内部的LISP代码准备的,因为LISP市一中解释
性语言,所以LISP程序设计过程中代码的书写和运行/调试界限比较模糊。Emacs
利用了LISP语言的这个特点,在Emacs LISP中,命令
M-C-x 就会对光标附近的函数定义进行求值
M-tab Emacs LISP中的自动补足
M-: 在此输入的代码会进行求值
*** Emacs LISP交互模式
LISP交互模式的功能更加强大。在*scratch*缓冲区输入的东东认为在LISP交互
模式
C-j 对光标所在的s-表达式进行求职
** fortran模式
** 对文件进行编译
M-x compile RET Emacs将对文件进行编译,引发一连串事件
C-x ` Emacs自动把光标移动到第一个出错处,修改后继续
M-n 移动到下条出错信息
M-p 移动到上条出错信息
C-c C-c 访问对应于当前出错信息的源代码
spa 下卷屏幕显示内容
del 上卷屏幕显示内容
spa和del是Emacs对制度模式所使用的卷屏命令
* 第十三章 用LISP语言对Emacs做进一步开发
在这里展现的是Emacs最动人的特性:有成千上万的扩展,一旦你发现它缺少什
么功能,这个问题早就有别人解决了——即使没有人解决,你都可以自己动动手,
用Emacs LISP去解决它!
在这一章中并不打算详尽的介绍Emacs LISP,而是侧重于介绍这种语言的基本概
念和编写Emacs代码是常用的命令和技巧。
** LISP语言简介
(草草看一遍)
*** LISP语言的基本元素
函数、变量和原子项是LISP语言最基本的元素,
*** 函数的定义
*scratch* 是一个LISP交互模式,可以在这个编辑缓冲区里面使用给出的程序
实例。
* 第十四章 Emacs编辑器和X窗口系统
* 第十五章 Emacs下的版本控制
** 版本控制的用途
版本控制系统允许返回到项目开发过程中历史记录的任何一个阶段,并且能够方
便的制作出各版本之间差异比较的报告
** 版本控制的有关概念
处于版本控制下的每个文件都有一份修订记录,这份记录由一个原始版和一系列
修订版组成。
想要对一个文件进行版本控制,就必须先把它注册到版本控制系统上。
如果想对一个已经注册的文件进行修改,就必须check out这个文件。
在对工作文件进行修改的过程中,你可以随时复原工作文。但如果你想把自己对
文件的修改保存起来,就必须check in那些改动。
** VC对基本操作的辅助作用
VC的操作界面非常简单,这种简单性来源于这样一个事实:不管你的版本受控文
件出于什么状态,合乎逻辑的后继操作通常就只有一种。下面是有关规则:
(1)若文件还没有被置于版本控制系统下,接下来的步骤就是注册它并签出一份
允许被修改的副本
(2)如果文件已经被注册但是还没有人check out,接下来的逻辑步骤就是check
out it并且修改
(3)如果已经把文件check out,接下来的逻辑步骤就是check in it
(4)如果有人check out,你所能做的只是等待或者卸下锁
事实上,VC模式只有一个基本命名
C-x v v 对这个文件做下一个合乎逻辑的操作
C-x v u 复原操作
** 修改注释的编辑
** VC命令汇总
** VC模式的标志
** 使用哪一种版本控制系统
** VC命令细说
** 对VC进行定制
** 对VC进行扩展
** VC的不足之处
** 有效地使用VC
* 第十六章 在线帮助
** Emacs的自动补足功能
Tab 尽可能多的补足这个名称
Spa 补足这个名称直到下一个标点符号
? 以此前输入的字符为依据,列出可用列表
** 帮助命令
C-h C-h 或 C-h ? 最基本的帮助命令
*** 详细资料
C-h c 这个按键组合将运行哪些命令
C-h k 详细讲解上这个按键组合的命令
C-h l 最近输入的100个字符是什么
C-h w 这个命令的按键绑定是什么
C-h f 这个函数的作用是什么
C-h v 这个变量的含义?可以取哪些值
C-h m 查看当前编辑模式有关资料
M-h b 这个编辑缓冲区有哪些键绑定
C-h s 这个编辑缓冲区使用哪些哪些语法表
*** 一般性资料
C-h t 运行Emacs教程
C-h i 启动文档阅读器info程序
** 针对复杂Emacs命令的帮助功能
*** Emacs的info系统
在info系统里面有大量的文献和资料,如果把它逛一圈那一定是水平大增呀~
RET 进入某一项文章
l 后退,等同于web浏览器
p 前一篇文章
n 后一篇文章
u 上级菜单的文章
s 搜索string,按下s继续
当然在搜索这一项Emacs是无比强大的。在info里面搜索直接用搜索命令就好了
Learning Gnu Emacs 读书笔记
对“Learning Gnu Emacs 读书笔记”的回应
《学习GNU Emacs》热门书评
-
Learning Gnu Emacs 读书笔记
29有用 0无用 e_rain 2007-02-13
* 前言:全书的脉络第一章 Emacs的基本概念:Emacs的启动核对文件操作、在线帮助系统第二章 文件编辑:光标移动、复制粘贴、撤销修改命令;初级的定制第三章 查找和替换:查找替换、单词简写、拼写检查第四章 使用编辑缓冲区和窗口:多编辑缓冲区、书签第五章 Emacs工作环境:shell操作、对文件...
-
看这本不如直接翻手册
9有用 1无用 tangboyun 2011-01-02
这本书其实市面上已经买不到了。想看的同志可以搜淘宝上的一些翻印版本,我是弄了一本,翻完以后,个人觉得: 看这本书,不如直接翻Emacs自带的Manual,如果觉得电脑上翻很吃力,那么这里:http://www.gnu.org/software/emacs...
-
习惯
8有用 2无用 francis 2009-11-20
之前看过vim作者的一个视频,大概就是说不要去学编辑器,要去用,要将所有常用的编辑动作都形成一个习惯。关于形成习惯,他总结成三个步骤:1. 找出编辑中缺乏效率的情况2. 找出在这个情况下能有效编辑的方法3. 坚持使用这种方法,直到你的手指习惯它其实所有的编辑器甚至工作上很多事也是这样,坚持上面的步骤...
-
Emacs兵器谱
4有用 0无用 沉浮 2012-01-03
Emacs是神的工具,所以它还是个工具。这本书是介绍Emacs这个工具的书,所以它还是本工具书,。所以,不要期望它可以成为什么鸿篇巨著,让你读完醍醐灌顶,羽化成仙。但是,最起码它可以让你更系统的认识Emacs。如果说Emacs是个兵器库,那么这本书就是一本很好的兵器谱。这本兵器谱的最大用途就是系统的...
-
去看英文版吧。。
2有用 4无用 boycpu 2007-04-18
emacs这个东西,是需要与之灵魂交流的。就像是gentoo.这本书还是相当不错的,只不过当时我的手上没有英文版的,所以就只好用中文版将就一下。对于热爱linux的同道们,想说的一句话就是,不要去读中文版的书,当然如果外界环境部允许的话也就只好迁就一下了 :)...
书名: 学习GNU Emacs
作者:
出版社: 机械工业出版社
译者: 王建桥 | 杨涛 | 杨晓云
出版年: 2003-1
页数: 584
定价: 68.00元
ISBN: 9787111103486