`

Programming in Emacs Lisp笔记(十)Yanking Text Back

阅读更多

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函数虽然看起来不复杂,但它实际包含了很多 细节。

评论

相关推荐

    Programming in Emacs Lisp

    Programming in Emacs Lisp英文版

    An Introduction to 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

    - **标题**:“An Introduction to Programming in Emacs Lisp Second Edition” - **描述**:本书是关于Emacs Lisp编程的入门教程,被誉为“经典中的经典”。 该书由Robert J. Chassell撰写,由自由软件基金会出版...

    Robert Chassell:An Introduction to Programming in Emacs Lisp

    ### 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

    An Introduction to Programming in Emacs Lisp [3.10].chm

    GNU Emacs Lisp编程入门(文本org)

    Programming in Emacs Lisp: An Introduction (美)Robert J.Chassell 著 毛文涛、吕芳 译 洪峰 审校 本书的作者罗伯特·卡塞尔是自由软件基金会的合创人之一,也是理查德·斯托曼博士青年时期结交的挚友,他...

    GNU Emacs Lisp编程入门

    GNU Emacs Lisp编程入门(清晰版) 英文名:An Introduction to Programming in Emacs Lisp

    GNU Emacs Lisp 编程入门

    GNU Emacs Lisp 编程入门是一本非常专业的编程书籍,它详细地介绍了如何使用GNU Emacs Lisp这种编程语言来编写程序。GNU Emacs Lisp是一种用于GNU Emacs编辑器的编程语言,它是一种功能强大且灵活的编程工具,广泛...

    Programming-in-Emacs-LISP.pdf.rar_LISP PDF_emacs lisp_emacs lisp

    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,emacs lisp和yasnippet支持atom和github。.zip

    在“Atom-language-emacs-lisp.zip”这个压缩包中,主要关注的是对Emacs Lisp的支持。Emacs Lisp是一种用于扩展和定制GNU Emacs编辑器的Lisp方言。它提供了丰富的API和交互式编程环境,使得开发者可以编写自定义的...

    GNU EMACS lisp编程入门.djvu

    GNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvuGNU EMACS lisp编程入门.djvu

    gnu emacs lisp 编程入门

    本书的英文版原名是《Programming in Emacs Lisp: An Introduction》,由自由软件基金会出版,享有复制与分发的权限。机械工业出版社在2001年5月出版了中文版,ISBN为7-111-08862-6。书籍的定价为38.00元,并承诺如...

    GNU Emacs Lisp Reference Manual For Emacs Version 22.1 Revision 2.9, April 2007

    ### GNU Emacs Lisp 参考手册知识点总结 #### 1. 引言 GNU Emacs Lisp 参考手册为Emacs版本22.1提供了详细的指导,该版本为修订版2.9,发布于2007年4月。该手册由Bil Lewis、Dan LaLiberte、Richard Stallman以及...

    emacs-lisp编程入门

    Emacs Lisp(简称Elisp)是GNU Emacs编辑器的核心编程语言,它允许用户自定义、扩展和控制这个功能丰富的文本编辑器。作为一个强大的脚本语言,Elisp在程序员和Emacs爱好者中广受欢迎,不仅适合初学者,也满足高级...

    emacs lisp函数手册,版本24.3

    ### Emacs Lisp 函数手册知识点概览 #### 一、引言 Emacs Lisp(简称Elisp)是Emacs文本编辑器内置的一种高级编程语言。它不仅支持编辑文档时的脚本化操作,还具备完整的编程功能,使得用户可以扩展Emacs的功能。本...

Global site tag (gtag.js) - Google Analytics