如何用垃圾缓冲区内容替换emacs中的区域?

时间:2010-04-13 05:59:38

标签: emacs

当我使用VIM或大多数无模式编辑器(Eclipse,NetBeans等)时,我经常执行以下操作。如果我有类似的文本块,我需要更改它们,我将更改一个,复制它(或使用非删除的yank),选择我需要的下一个块并将更改后的版本粘贴到它上面。如果我在emacs中做同样的事情(选择区域并用C-y粘贴),它不会替换区域,只是粘贴在光标位置。在emacs中执行此操作的方法是什么?

7 个答案:

答案 0 :(得分:66)

将此添加到您的.emacs

(delete-selection-mode 1)

在区域处于活动状态时写入缓冲区的任何内容都会覆盖它,包括粘贴,但也只是输入内容或命中退格

答案 1 :(得分:15)

像迈克尔建议的那样设置delete-selection-mode似乎是最自然的方式。

然而,这不是我做的事情:)相反,我将好东西放入“寄存器” - 例如,注册“a” - 与C-x r x a。然后我杀了另一个副本,并用C-x r g a将寄存器复制到同一个地方。

这很方便,因为查杀不会影响寄存器,所以C-x r g a总是插入好东西。

答案 2 :(得分:8)

执行此类操作的默认方式是不完全优雅的跟随:

  1. 以某种方式将你想要的替换文本放入杀戮戒指(例如,M-w)。
  2. 突出显示要替换的区域。
  3. 删除它(C-w)。
  4. 将其替换为先前复制的区域(C-yM-y)。这会将刚刚删除的内容替换为您刚刚删除的完全相同的文本(C-y),然后将其重新替换为缓冲区中最近保存的下一个缓冲区(M-y)。 / LI>

    如果你想用相同的文字做10次,这将是一个真正的痛苦,因为每次你删除一个区域时,所需的替换将被推回杀戮戒指的更远,所以你必须每次想要抓住它时,都会越来越多地呼叫M-w

    我刚刚发现了M-x delete-region,感谢Emacs: how to delete text without kill ring?。正如问题所暗示的那样,这会删除违规文本而不将其放入杀环中,从而避免将替换文本进一步向下推入堆栈的问题。并且,正如相关响应所提到的,您可以将其绑定到您选择的快捷键。

答案 3 :(得分:3)

我这样做的方式是:

  • 去你想要的新东西
  • 粘贴好东西
  • 你的光标现在位于新东西和你想要摆脱的东西之间
  • 选择前进,直到您想要摆脱的所有内容被选中
  • 删除它

这是一种略微不同的思考方式。粘贴你想要的东西,然后摆脱你不想要的东西,而不是用你所做的东西替换你不想要的东西。

答案 4 :(得分:2)

如果启用CUA模式,则粘贴选定区域将成为正常行为。

答案 5 :(得分:2)

使用delete-selection-mode,以便粘贴的文本替换活动区域。

使用辅助选择,一遍又一遍地粘贴相同的文本,即使您选择要替换的新区域也是如此。

请参阅http://www.emacswiki.org/emacs/SecondarySelection

答案 6 :(得分:1)

对于那些不想像我一样更改全局设置的人,我使用此功能和键绑定:

import returnStoreAndPersistor from "../../store";

const { store } = returnStoreAndPersistor()
console.log(store.getState())

我有意将选定的文本添加到kill环中,以防日后需要时,然后取消该环中先前的内容。