笔记连载完毕。感谢大家的支持!
离线版本可以从这里下载。
调试
GNU Emacs中有两个高度器,debug和edebug。第一个是Emacs内建的可以随时使用它;第二个需要借助一些函数才能使用。
debug
假设你编写了用于加1的函数。但函数有个bug。你误将1-输入为1=了。函数定义如下:
(defun triangle-bugged (number) "Return sum of numbers 1 through NUMBER inclusive." (let ((total 0)) (while (> number 0) (setq total (+ total number)) ...
.emacs文件
Emacs的缺省配置
Emacs缺省配置的优点。Emacs在你编辑C文件时将启动C mod,编写Fortan源文件时启动Fortran mode,编写未知文件时使用Fundamental mod。这些都是自动检测的,不需要干预。
可以通过~/.emacs对Emacs进行定制。这是你个人的初始化文件;它的内容是Emacs Lisp代码。
全局初始化文件
除了个人初始化文件外,Emacs将自动加载全局初始化文件,这与.emacs文件一样,但它将被所有的用户加载。
有两个全局初始化文件site-load.el和site-init.el,在被加载到Emacs后被'd ...
准备图表
我们的目标是构造一个图表显示Emacs lisp源码中所有函数定义的长度范围。
在实际应用中,如果你要创建一个图表,你可能会使用gnuplot之类的程序来完成这个工作。(gnuplot与GNU Emacs集成得很好。)但在这里,我们将使用前面我们所学的知识来完成这个工作。
在这章,我们将先编写一个简单的图表打印函数。第一个版本将作为原型,在此基础上来增强。
打印图表列
由于Emacs被设计为能在各种终端上工作,包括字符终端,图表需要是可打印字符。我们可以使用星号来打印图表。
我们把这个函数命名为graph-body-print;它使用numbers-list作为参数。 ...
统计defun中的单词数量
我们的下一个计划是统计函数定义中的单词数量。我们可以使用count-word-region函数的一些变种(正则 表达式方式)来完成这个工作。如果我们只是需要统计定义中的单词数量的话,可以简单的使用C-M-h(mark-defun)命令,然后调用count- word-region。
但我们要进行的是一项雄心勃勃的计划:我们需要统计Emacs源码中所有的函数和符号并打印出各个长度的函数分别有多少个:包含40至49个单词或符号的有多少,包含50到59个单词或符号的有多少,等等。
分割任务
这个任务目标使人畏惧;但如果将它分割成多个小的步骤,每次我们只处理其中 ...
计数:重复和正则表达式
重复执行和正则表达式是Emacs Lisp中非常强大的工具。这章讲解使用while循环和递归结合正则表达式进行查找进行字数统计。
字数统计
标准的Emacs发行版中包含了一个统计region中行数的函数。但没有统计字数的函数。
count-words-region 函数
字数统计函数可以统计行、段落、region、或者整个缓冲区。到覆盖范围该多大?Emacs的鼓励使用弹性的方式。可以将函数设计为处理region。这样即使需要统计整个缓冲区,也可以先用C-x h(mark-whole-buffer)先选定整个缓冲区。
统计字数是一个重复的动作:从regi ...
正则表达式查询
在Emacs中正则表达式查询使用得很广泛。在forward-sentence和forward-paragraph中使用了正则表达式查找定位。正则表达式'regular expression'常被写作'regexp'。
sentence-end的正则表达式
符号sentence-end被绑定到匹配名末的正则式上。
句末通常是用一个句号、问号或者叹号结束的。那么这个正则表达式应该包含下面的字符:
[.?!]
然而,在有些时候句号、问号或叹号也有可能在某个语句的中间,我们并不想在使用forward-sentence的时候跳转到这些符号上去。
习惯上,你可能会在每个句 ...
循环和递归
Emacs Lisp有两种方式循环执行语句:使用while循环,或者使用递归。
while
while测试它的第一个参数的值,如果为false,解释器将不会执行语句的body部分。如果为true,解释器将执行语句的body部分,然后重新测试第一个参数的值,开始下一轮循环。
while语句模板如下:
(while true-or-false-test body...)
使用while循环
如果while语句的true-or-false返回为true则body部分被执行。
对while求值的返回值是true-or-false-test的值。有趣的是while循环执 ...
Yanking Text Back
当使用'kill'命令剪切文本时,可以用'yank'命令恢复它。被剪切的文本被放到kill ring,yank命令可以将文本恢复。
C-y(yank)命令插入kill ring中的第一个元素到缓冲区。如果C-y命令后立即跟一个M-y,则插入的文本将被替换为kill ring的第二个元素。连续的按M-y,将使用kill ring中更靠后的文本替换前一次操作插入的文本。当到达最后一个元素时,又将从第一个元素开始。(这也是kill ring被称作ring而不是list的原因)然而实际上保存了文本的数据结构是list。
Kill Ring Overview ...
使用muse生成了这个笔记的html版本。里面有带链接的索引,浏览起来比较方便。可以从附件下载。
以后有新的更新时,我会同时更新这个链接。
这个发布文件使用的薛瑞尼所写的Muse CSS文件。
List的实现
Lisp中list使用了连续的指针对来保存数据,指针对的第一个指针指向一个原子或者另一个list,指针对的第二个指针指向另一个指针对,或者指向nil,以表明list的结束。
List图示
举例来说,list(rose violet buttercup)有3个元素,rose,violet和buttercup。在计算机中,rose的地址被保存在计算机内存中,通过这个地址可以知道 原子violet被分配在了哪个位置;通过这个地址又可以知道原子buttercup的地址。
听起来比较复杂,看图就简单多了:
___ ___ ___ ___ ___ ...
剪切和存储文本
当使用'kill'命令剪切文本时,Emacs将它存储到一个列表中,可以用'yank'命令重新获取到。
存储文本到列表
当文本被剪切出缓冲区时,它将被存储到一个list中。文本块连续的存储在list中,这个列表看如下面的形式: 函数cons可以添加文本块到list,如:
(cons "another piece" '("a piece of text" "previous piece"))
执行上面的语句,回显区将显示
("another piece" "a pi ...
- 浏览: 48971 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
JBPM 与 Spring 结合
sessionFactory怎么配的?
-- by jinguizi -
重新整理后的Oracle OAF学 ...
太好了!谢死你了!
-- by chenpu -
ExtJS中FormPanel实现数 ...
请教一下楼主,本地json数据如何实现分页?单击下一页时,怎样在js中得到当前的 ...
-- by gaipai -
重新整理后的Oracle OAF学 ...
这个格式的高亮显示都看不清了
-- by qinglangee -
ExtJS中FormPanel实现数 ...
把你的后台代码发出来看看啊 光说返回JSON的格式,看看你到底是怎么返回的啊 y ...
-- by yongtree






评论排行榜