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

Mad*_*bat 38 emacs

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

Mic*_*zek 66

将此添加到您的.emacs:

(delete-selection-mode 1)
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不是这个默认值? (2认同)
  • @mcb直到最近,该区域默认不可见的原因可能相同; 当你移动点时,标准的emacs练习是(或者可能)将标记保持在一个位置,并且除非你使用专门操作它的命令,否则它们之间存在区域的事实是无关紧要的.你不希望每次打字时都要破坏这个区域,并且有一些命令,比如`exchange-point-and-mark`就可以跳到你离开标记的地方.这些天我怀疑大多数人不会那样使用标记,因此总是显示该区域并将其视为"活动"可能没问题 (2认同)
  • 这在手动键入标记区域时有效,但在粘贴文本时无效.:( Emacs 24/Ubuntu 14.04. (2认同)

off*_*by1 15

delete-selection-mode正如迈克尔建议的那样,设置似乎是最自然的方式.

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

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


Bob*_*obS 8

做这样的事情的默认方式是不完全优雅的追随者:

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

如果你想用相同的文本做10次,这将是一个真正的痛苦,因为每次你删除一个区域时,所需的替换将被推回杀戮环更远,所以你必须调用M-w增加每次你想要它的次数.

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