浏览 2700 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-04
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 Overviewkill 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-pointerkill-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变量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函数虽然看起来不复杂,但它实际包含了很多 细节。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |