如何用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
总是插入好东西。
这样做的默认方式是不完全优雅的以下:
- 以某种方式将您想要的replace文本(例如,Mw)放入杀死环中。
- 突出显示要被replace的区域。
- 删除它(
Cw
)。 - 将其replace为之前复制的区域(
Cy
,My
)。 用刚刚删除的文本(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来反复粘贴相同的文本。