如何用yank缓冲区内容replaceemacs中的区域?

当我使用VIM或最无模式的编辑器(Eclipse,NetBeans等)时,我经常执行以下操作。 如果我有类似的文本块,我需要改变它们,我会改变它,复制它(或使用非删除阴阳),select我需要的下一个块,并粘贴更改后的版本。 如果我在emacs中做同样的事情(select区域并贴上Cy),它不会取代区域,它只是粘贴在光标位置。 在emacs中这样做的方法是什么?

添加到您的.emacs

 (delete-selection-mode 1) 

在区域处于活动状态时写入缓冲区的任何内容都将覆盖它,包括粘贴,但也只需键入内容或点击退格键

按照Michael的说法,设置delete-selection-mode似乎是最自然的方法。

但是,这不是我所做的:)而是,我把好的东西放到一个“注册”中 – 例如,用Cx rxa注册“a”。 然后我杀死另一个副本,并将该寄存器复制到与Cx rga相同的位置。

这很方便,因为Cx rga不会影响寄存器,所以Cx rga总是插入好东西。

这样做的默认方式是不完全优雅的以下:

  1. 以某种方式将您想要的replace文本(例如,Mw)放入杀死环中。
  2. 突出显示要被replace的区域。
  3. 删除它( Cw )。
  4. 将其replace为之前复制的区域( CyMy )。 用刚刚删除的文本( Cy )replace刚刚删除的内容,然后用缓冲区环( My )中的下一个最近保存的缓冲区重新replace它。

如果你想用相同的文字做这10次,这将会是一个真正的痛苦,因为每次你删除一个区域时,所需的replace将被推回到杀戒环中,所以你必须打电话给Mw每次你想要抽出的次数越多越好。

我也刚刚发现Mx delete-region ,感谢Emacs:如何删除文本没有杀戒? 。 正如问题所暗示的,这会删除违规文本,而不会将其放入kill ring中,从而避免将replace文本进一步压入堆栈的问题。 而且,正如相关的回应所述,您可以将其绑定到您select的快捷键。

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

我这样做的方式是:

  • 去你想要的新东西
  • 粘贴好东西
  • 你的光标现在在新的东西和你想摆脱的东西之间
  • select前进,直到你想要摆脱的一切都被选中
  • 删除它

这是一个稍微不同的思考方式。 粘贴你想要的东西,然后摆脱你不想要的东西,而不是用你所做的事replace你不想要的东西。

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

即使您交替select要replace的新区域,也可以使用辅助select来反复粘贴相同的文本。

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