如何在Emacs中列出所有的yanks?

14
有没有一种方法可以在Emacs中列出所有复制的文本?在Textmate中,您可以使用SPLAT+V来完成此操作。 编辑:我指的是最近删除的项目,可以复制这些项目。

你的措辞有点令人困惑。你是想查看kill ring(在这种情况下,Frédéric的答案可以帮助你解决问题),还是只想列出实际从kill ring中提取的文本?(在我看来这可能有点奇怪,但它更符合你的问题)。 - phils
@phils:Textmate 允许您从最近复制的项目中选择要粘贴的项目。我可以使用 C-u <item no> C-x C-y 来复制索引为 2 的项目,但我想看到列表中的所有项目。希望这样能更清楚明白。 - Suresh
不好意思,不是很清楚。"列表"是指杀戮环(其中包含已复制和删除的文本,您可以从中提取任何项目,但可能以前没有被提取过),还是仅指已经被提取过的项目。 "最近提取的项目"与"最近删除的项目"不是同一回事,我仍然不确定您指的是哪一个。请注意,C-y从杀戮环中提取。 - phils
抱歉,我的意思是最近删除的项目。 - Suresh
6个回答

12

可以抓取的列表(即可以拖动的内容)称为kill ring,存储在变量kill-ring中,因此您可以使用C-h v kill-ring RET查看它(以不太好的方式)。

剪切板还出现在菜单中,在“编辑/从剪贴菜单中粘贴”下。如果您使用文本模式Emacs或关闭了菜单栏,则可以使用M-x tmm-menubar(绑定到M-`)访问菜单:键入M-` e p,然后是要粘贴的项目的第一个字母(如果它是字母并且唯一,否则是指示的任何字符)。如果您不想粘贴任何内容,请键入M-` e p C-g;杀死仍保留在*Completions*缓冲区中。杀死的文本被截断显示为yank-menu-length个字符。


关于 yank-menu-length 的信息很有用,因为我的 Windows Emacs 安装默认设置为很低的值(20),导致拷贝菜单几乎没用。我将其设置为 250,现在还有足够的空间。计量单位必须是除字符以外的东西。不过,改变它的值好像直到重新启动 Emacs 才会生效。 - Alan

8
据我所知,Emacs 默认不支持此功能。
如果你使用 Debian 或 Ubuntu Linux 发行版,可以安装 emacs-goodies-el 软件包,其中包含 browse-kill-ring 功能(默认绑定到 M-y)。
另外,你也可以使用 browse-kill-ring ELisp 软件包,该软件包 在这里 可用。
此外,这篇 不错的文章介绍了这个问题和其他替代方案。

1
这个EmacsWiki页面 是有关于browse-kill-ring.el和相关代码的最佳信息来源。 - Drew

3

EmacsWiki有一个非常令人满意的解决方案列表。一个便携而直观的解决方案使用内建的popup.el来显示垂直列表以供选择:

(global-set-key (kbd "C-c y") '(lambda ()
                                 (interactive)
                                 (popup-menu 'yank-menu)))

1
Icicles 中,您可以查看所有的 kill-ring,并使用完成功能提取其中的任何条目。默认情况下,在 Icicle 模式下,C-y 绑定到 icicle-yank-maybe-completing

这与 yank 相同,除非您给它一个负前缀参数(例如,C--)。在这种情况下,它允许您针对 kill-ring 进行完成。完成可以是前缀、适当(子字符串、正则表达式)或模糊匹配。

http://www.emacswiki.org/emacs/Icicles_-_Multi-Commands


1

1

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