什么是emacs中的"ring"?

6
与 Windows 风格的自我解释复制/剪切/粘贴命令不同,我无法理解 Emacs 中ring概念。由于我并不经常在 Emacs 中编程,可能没有意识到 ring 功能的价值。你能告诉我 Emacs 中的 ring 是什么以及如何使用它吗?

1
我认为这个问题在这里不是离题的。这是一个关于计算机技术的问题,涉及到如何在Emacs中实现剪贴板。 - viam0Zah
4
每当有人说某个计算机技术是“不言自明”的时候,我觉得这实际上意味着他们学习它已经很久了,已经忘记了他们曾经不理解它的时候。 :-) - Ken
1
Emacs环不是一个简单的剪贴板,当然也不是自我解释的。通常情况下,当Emacs执行某些操作时,它会以超级功能丰富、难以理解的方式来完成,这对于那些愿意投入时间学习的少数用户来说是非常强大的。 - Peter Recore
更多的环形函数,供参考:http://www.emacswiki.org/emacs/ring%2b.el - Drew
我妈妈觉得剪切/复制/粘贴不是很好理解。 - Mirzhan Irkegulov
5个回答

12

简单来说,每次你使用复制 (M-w) 或剪切 (C-w) 命令时,所选中的文本会被插入到一个称为“环”(类似于封闭的列表)的顶部。

有趣的部分在于接下来。如果你使用粘贴命令 C-y,那么最近粘贴的文本(现在是环的前端元素)会被插入到缓冲区中。如果继续按下 M-y,那么文本将被依次替换为来自环中旧的元素,也就是说,环被旋转,以前的文本每次都被指定为 front 元素。这使你可以访问早期的剪切/复制文本。

好用的部分不仅仅是这样。如果你剪切/复制其他文本,它将插入到环的 top 处,并再次旋转环,使得 top 成为了新的 front。然后你可以重新开始使用 C-y M-y 命令序列,并将新插入的文本指定为 front

因此,总结一下:

  • 环的 top 是新复制/剪切 (M-w/C-w) 的文本被插入的地方。当发生这种情况时,top 元素就成为了 front 元素。
  • 环的 front 元素是粘贴(也称为 yank)命令 C-yM-y 操作的位置,通过将其插入到缓冲区中。M-y 命令还会旋转环,使得环中更早的文本成为了 front 元素。
你可以通过想象圆环,其前面固定在12点位置但不是环的一部分,来可视化它。相反,顶部是环的一部分,所以当某个命令旋转环时,顶部也会被旋转。

alt text


4

在Windows中,每次你复制或剪切东西到剪切板上时,之前剪切板上的内容就会被覆盖。(尽管有些程序会为你存储先前的剪贴板内容)但是,Emacs的“环”可以在复制/粘贴/剪切/删除内容后仍然保存旧的剪贴板内容。如果你习惯使用它,它可能很方便,因为它允许你一次性存储多个剪贴板内容,并减少了在Windows中不小心覆盖你所剪切到剪切板上的某些内容的几率。


3

环是一个循环缓冲区。可以把它想象成转盘式名片盒。

如果你将信息存入环中,那么可以在历史记录中前后移动。


2
在Ubuntu上,安装了emacs-goodies-el软件包后:
按下C-( M-x browse-kill-ring RET C-) 这将定义一个临时键盘宏,调用browse-kill-ring当您按下C-x e
现在您不仅可以阅读有关kill ring的内容,还可以实际查看其中的内容。
尝试使用C-w(剪切),M-w(复制),C-y(粘贴)和C-y M-y(粘贴环中的下一个),然后按下C-x e以查看对kill ring的影响。

browse-kill-ring 是一个标准库函数吗?我找不到它。 - viam0Zah
@Török Gábor:哎呀,我没意识到它不是标准库函数。在Ubuntu上,它是由emacs-goodies-el包提供的。代码可以在这里找到:http://www.fan.gr.jp/~ring/doc/misc/browse-kill-ring.el - unutbu
http://www.emacswiki.org/emacs/browse-kill-ring.el, http://www.emacswiki.org/emacs/browse-kill-ring%2b.el - Drew

1

来自Emacs手册:“环是一种固定大小的数据结构,支持插入、删除、旋转、模数索引引用和遍历。” 换句话说,它是一个循环队列


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接