如何在Emacs中将缓冲区中的几行复制到另一行



我有两个缓冲区。我想把第一个缓冲区中的第2行、第5行、第9行和第10行复制到第二个缓冲区(只需附加到第二缓冲区)。除了一次抄一行,还有什么优雅的方法吗?

您可以使用绑定到C-M-w的命令append-next-kill将更多文本添加到终止环上的最新条目中。在M-w命令之前使用它,类似于以下命令:

  • 标记并复制第2行:C-SPCC-nM-w
  • 移动到第5行
  • 标记并附加副本:C-SPCC-nC-M-wM-w
  • 移到第9行

。。。等等

当你用C-y拖动文本时,你会得到你选择并附加到kill ring条目的行。

对于现成的功能,我建议查看multiple-cursors.el。当您有一个需要在多个位置选择和修改的符号/regexp时,它尤其有效。

https://github.com/magnars/multiple-cursors.el

然而,它也可以通过其通用的添加光标功能处理特定的线/点:

mc/add-cursor-on-click

但这意味着您必须将其绑定到鼠标事件(如提示部分所建议的):

(global-set-key (kbd "C-S-<mouse-1>") 'mc/add-cursor-on-click)

这意味着你必须伸手去拿鼠标,但创建一个新功能mc/add-cursor-at-line:看起来很容易

(defun mc/add-cursor-at-line (&optional linenum)
(interactive "nLine number: ")
(save-excursion 
(goto-char (point-min))
(forward-line (1- linenum))
(mc/create-fake-cursor-at-point))
(mc/maybe-multiple-cursors-mode))

然后,一旦你在所有线路上设置了多个光标:

复制所有光标:C-SPCC-eM-w

切换缓冲区和。。。

洋基矩形:C-x r y

一个简单的解决方案是记录一个宏,将一行从一个缓冲区复制到另一个缓冲区时(f3 C-SCP C-n M-w C-x o C-y C-x o f4),然后在要复制的每一行上执行宏(f4)。

如果这是一个重复出现的场景,则可以保存宏并将其绑定到键。

根据具体的用例,我可能会将整个区域从第一行复制到最后一行,然后杀死新缓冲区中不需要的行。

  • 1.移动到第一行的开头进行复制
  • 2. C空间 设置标记开始标记区域
  • 3.移动最后一行的末尾进行复制
  • 4. M-w 复制区域
  • 5。 C-x b 缓冲区名称 RET 转到第二个缓冲区
  • 6.移动到第二缓冲区中的插入位置
  • 7. C-y 插入(yank)区域
  • 8. C-x C-x 转到洋基区域的开始
  • 9. C-n 重复,直到到达第一个不需要的行
  • 10. C-k C-k 删除不需要的行
  • 11. 转到9直到完成

如果在新缓冲区中有较长的不需要的行要删除,请执行步骤9。至11。应该被类似的东西取代:

  • 9.移动到较长不需要的线条的开始
  • 10. C空间 设置标记开始标记区域
  • 11.移动到不需要的较长线条的末尾
  • 12. C-w 杀伤区
  • 13。 转到9,直到完成

最新更新