在Emacs中,我经常会剪切一些文本,然后用剪贴板中的文本替换其他文本。因此,假设我想要粘贴的文本是在我的kill-ring
中的最后一个项目。我将其粘贴到新位置,然后删除已经存在的文本。但现在被删除的文本成为了kill-ring
中的最新项目。所以下次我想要粘贴第一个项目时,我必须执行 C-y M-y。然后下一次kill-ring
中会有两个更近的项目,因此我必须执行C-y M-y M-y,以此类推。
我猜这里一定有更好的方法。能否有人给我指点一下呢?
在Emacs中,我经常会剪切一些文本,然后用剪贴板中的文本替换其他文本。因此,假设我想要粘贴的文本是在我的kill-ring
中的最后一个项目。我将其粘贴到新位置,然后删除已经存在的文本。但现在被删除的文本成为了kill-ring
中的最新项目。所以下次我想要粘贴第一个项目时,我必须执行 C-y M-y。然后下一次kill-ring
中会有两个更近的项目,因此我必须执行C-y M-y M-y,以此类推。
我猜这里一定有更好的方法。能否有人给我指点一下呢?
几种选择:
delete-selection-mode
,使用 C-d 或 delete 不接触 kill-ring 的情况下删除区域。query-replace-regexp
(C-M-%)。建议使用delete-region
而不是kill-region
。
delete-region
可以删除选区但不会将其放入kill ring中。它默认绑定到 <menu-bar> <edit> <clear>
。
如果您只想使用默认绑定而不使用菜单,则可以使用delete-rectangle
与C-x r d,但它仅适用于矩形。对于单行文本,像delete-region
一样使用它也可以。
delete-region
的默认键绑定,从Emacs 24开始,在选定区域上按Backspace键会执行delete-region
而不是kill-region
。请参阅delete-active-region
。 - Jisang YooEmacs中最古老且最好保密的秘密之一——不知道为什么:Emacs有次选区。
这正是它的用途。它为您保存另一个文本选择,供您反复使用。
选择一些文本,然后将次选区插入以替换它。在其他地方重复此操作。通常,这比像query-replace这样的功能更方便、灵活和精确。
请看看,这对您自己有好处——也许它会停止成为一个鲜为人知的功能... http://www.emacswiki.org/emacs/SecondarySelection
我编写了这个函数来从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."))
相关的是M-x browse-kill-ring
。如果你使用M-x anything
,你也可以使用M-x anything-show-kill-ring
。