我有两个缓冲区。我想把第一个缓冲区中的第2行、第5行、第9行和第10行复制到第二个缓冲区(只需附加到第二缓冲区)。除了一次抄一行,还有什么优雅的方法吗?
您可以使用绑定到C-M-w
的命令append-next-kill
将更多文本添加到终止环上的最新条目中。在M-w
命令之前使用它,类似于以下命令:
- 标记并复制第2行:
C-SPC
、C-n
、M-w
- 移动到第5行
- 标记并附加副本:
C-SPC
、C-n
、C-M-w
、M-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,直到完成