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
kill ring是被删除字符串的列表。例如:
("some text" "a different piece of text" "yet more text")
按C-y字符串some text将插入当前缓冲区的光标位置。
yank命令也可以用于复制文本。复制文本而不从缓冲区剪切文本,文本被复制一份放到kill ring中。
有三个函数可以将文本从kill ring上恢复:yank,通常被绑定在C-y上;yank-pop,通常绑定在M-y;rotate-yank-pointer它使用了另外两个函数。
这些函数通过变量kill-ring-yank-pointer指向kill ring。实际上yank和yank-pop插入文本的代码都是:
(insert (car kill-ring-yank-pointer))
为了弄清楚yank和yank-pop是如何工作的,先需要了解kill-ring-yank-pointer变量和rotate-yank-pointer函数。
变量kill-ring-yank-pointer
kill-ring-yank-pointer是与kill-ring类似的变量。
如果kill ring的内容如下:
("some text" "a different piece of text" "yet more text")
kill-ring-yank-pointer将指向list第二个部分开始的list,kill-ring-yank-pointer是:
("a different piece of text" "yet more text")
前面关于List实现的章节曾说过:计算机并不会为kill-ring和kill-ring-yank-pointer分别保存拷贝。两个Lisp变量指向同一片文本,下面是图示:
kill-ring kill-ring-yank-pointer
| |
| ___ ___ | ___ ___ ___ ___
---> | | | --> | | | | | |
|___|___|----> |___|___|--> |___|___|--> nil
| | |
| | |
| | --> "yet more text"
| |
| --> "a different piece of text
|
--> "some text"
变量kill-ring和kill-ring-yank-pointer都是指针。kill-ring常被称作列表而不是说指向列表,而kill-ring-yank-pointer被称为指向列表。
rotate-yank-pointer函数修改kill-ring-yank-pointer指向的元素;当指针指向元素的第二个元素为kill ring的结束位置时,它将自动指向kill ring的第一个元素。这也展示了如何将一个list转变为ring。rotate-yank-pointer函数虽然看起来不复杂,但它实际包含了很多 细节。
分享到:
- 2007-07-04 17:59
- 浏览 2979
- 评论(0)
- 论坛回复 / 浏览 (0 / 2701)
- 查看更多
相关推荐
Programming in Emacs Lisp英文版
- **内容回填(Yanking Text Back)**:介绍了如何使用Emacs Lisp将之前剪切或复制的文本重新粘贴到编辑器中。 ##### 13. 循环与递归(Loops and Recursion) - **循环与递归(Loops and Recursion)**:讲解了循环和...
- **标题**:“An Introduction to Programming in Emacs Lisp Second Edition” - **描述**:本书是关于Emacs Lisp编程的入门教程,被誉为“经典中的经典”。 该书由Robert J. Chassell撰写,由自由软件基金会出版...
### Robert Chassell:An Introduction to Programming in Emacs Lisp #### 知识点概览 - **Lisp Lists**: 介绍Lisp列表的概念及其在Emacs Lisp中的应用。 - **Lisp Atoms**: 解释Lisp原子的基本概念以及它们在...
An Introduction to Programming in Emacs Lisp [3.10].chm
Programming in Emacs Lisp: An Introduction (美)Robert J.Chassell 著 毛文涛、吕芳 译 洪峰 审校 本书的作者罗伯特·卡塞尔是自由软件基金会的合创人之一,也是理查德·斯托曼博士青年时期结交的挚友,他...
GNU Emacs Lisp编程入门(清晰版) 英文名:An Introduction to Programming in Emacs Lisp
GNU Emacs Lisp 编程入门是一本非常专业的编程书籍,它详细地介绍了如何使用GNU Emacs Lisp这种编程语言来编写程序。GNU Emacs Lisp是一种用于GNU Emacs编辑器的编程语言,它是一种功能强大且灵活的编程工具,广泛...
GNU emacs Lisp manual This is a very interesting text, useful to write and program in several languages. Emacs is a editor made in Lisp, a artificial intelligence language.
在“Atom-language-emacs-lisp.zip”这个压缩包中,主要关注的是对Emacs Lisp的支持。Emacs Lisp是一种用于扩展和定制GNU Emacs编辑器的Lisp方言。它提供了丰富的API和交互式编程环境,使得开发者可以编写自定义的...
GNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvu
本书的英文版原名是《Programming in Emacs Lisp: An Introduction》,由自由软件基金会出版,享有复制与分发的权限。机械工业出版社在2001年5月出版了中文版,ISBN为7-111-08862-6。书籍的定价为38.00元,并承诺如...
### GNU Emacs Lisp 参考手册知识点总结 #### 1. 引言 GNU Emacs Lisp 参考手册为Emacs版本22.1提供了详细的指导,该版本为修订版2.9,发布于2007年4月。该手册由Bil Lewis、Dan LaLiberte、Richard Stallman以及...
Emacs Lisp(简称Elisp)是GNU Emacs编辑器的核心编程语言,它允许用户自定义、扩展和控制这个功能丰富的文本编辑器。作为一个强大的脚本语言,Elisp在程序员和Emacs爱好者中广受欢迎,不仅适合初学者,也满足高级...
### Emacs Lisp 函数手册知识点概览 #### 一、引言 Emacs Lisp(简称Elisp)是Emacs文本编辑器内置的一种高级编程语言。它不仅支持编辑文档时的脚本化操作,还具备完整的编程功能,使得用户可以扩展Emacs的功能。本...