在Emacs中,我能否为yanks(粘贴)保留相同的项目?

12

在Emacs中,我经常会剪切一些文本,然后用剪贴板中的文本替换其他文本。因此,假设我想要粘贴的文本是在我的kill-ring中的最后一个项目。我将其粘贴到新位置,然后删除已经存在的文本。但现在被删除的文本成为了kill-ring中的最新项目。所以下次我想要粘贴第一个项目时,我必须执行 C-y M-y。然后下一次kill-ring中会有两个更近的项目,因此我必须执行C-y M-y M-y,以此类推。

我猜这里一定有更好的方法。能否有人给我指点一下呢?


不知道还有其他的方法。你可能可以保存在一个寄存器中,但我自己没有使用过。 - cristobalito
你碰到了 kill-ring 的一个关键问题。最近使用的项目最有可能被重复使用。所以你不想按时间顺序排序环。使用我的 LRU-yank 包解决这个问题。https://github.com/lewang/le_emacs_LRU_yank 我用它更少的按键来提取有用的东西。 - event_jr
5个回答

10

几种选择:

  1. 打开 delete-selection-mode,使用 C-ddelete 不接触 kill-ring 的情况下删除区域。
  2. 使用 C-x r s i 将文本保存到寄存器 i 中,然后使用 C-x r i i 插入所保存的文本。
  3. 如果要替换的文本模式可以在正则表达式中捕获,请使用 query-replace-regexp (C-M-%)。

很好-谢谢。在Emacs学习上,你是否有停止的时候?! - Skilldrick
在这种情况下,我使用寄存器。它们通常很方便,因为您可以拥有多个! - user272735

6

建议使用delete-region而不是kill-region

delete-region可以删除选区但不会将其放入kill ring中。它默认绑定到 <menu-bar> <edit> <clear>

如果您只想使用默认绑定而不使用菜单,则可以使用delete-rectangleC-x r d,但它仅适用于矩形。对于单行文本,像delete-region一样使用它也可以。


你可以通过在迷你缓冲区中粘贴要用来替换其他内容的字符串,执行查询替换(M-%)操作:M-% 要替换的字符串 RET C-y RET! - Jérôme Radix
我会把问题保持开放一天以防万一,但如果我没有得到其他答案,请将其标记为已完成。 - Skilldrick
我在delete-rectangle上添加了一个单词,它可以像在单行上使用delete-region一样使用,而且delete-rectangle默认情况下有一个键绑定。 - Jérôme Radix
谢谢 - 这正是我想要的! - Skilldrick
关于delete-region的默认键绑定,从Emacs 24开始,在选定区域上按Backspace键会执行delete-region而不是kill-region。请参阅delete-active-region - Jisang Yoo
显示剩余2条评论

4

Emacs中最古老且最好保密的秘密之一——不知道为什么:Emacs有次选区

这正是它的用途。它为您保存另一个文本选择,供您反复使用。

选择一些文本,然后将次选区插入以替换它。在其他地方重复此操作。通常,这比像query-replace这样的功能更方便、灵活和精确。

请看看,这对您自己有好处——也许它会停止成为一个鲜为人知的功能... http://www.emacswiki.org/emacs/SecondarySelection


2

我编写了这个函数来从kill-ring中弹出最新的项:

(defun my-kill-ring-pop ()
  "Pop the last kill off the ring."
  (interactive)
  (when kill-ring
    (setq kill-ring (cdr kill-ring)))
  (when kill-ring-yank-pointer
    (setq kill-ring-yank-pointer kill-ring))
  (message "Last kill popped off kill-ring."))

所以,当我杀掉不想保留的东西后,我按下一个键调用这个功能。

谢谢 - 这是一个很方便的小工具。 - Skilldrick
你出于好奇绑定了什么? - drysdam

0

相关的是M-x browse-kill-ring。如果你使用M-x anything,你也可以使用M-x anything-show-kill-ring


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