我有两个缓冲区。我想将第一个缓冲区中的第2,5,9和10行复制到第二个缓冲区(只是附加到第二个缓冲区)。除了一次复制和过去一行,有没有优雅的方法呢?
答案 0 :(得分:4)
对于现成的功能,我建议您查看multiple-cursors.el
。当你有一个符号/正则表达式需要在多个地方选择和修改时,它会特别有效。
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-SPC C-e M-w RET
切换缓冲区和......
Yank Rectangle: C-x r y
答案 1 :(得分:4)
您可以使用绑定到append-next-kill
的命令C-M-w
将更多文本添加到kill ring上的最新条目。在M-w
命令之前使用它,如下所示:
C-SPC
,C-n
,M-w
C-SPC
,C-n
,C-M-w
,M-w
......等等。
当您使用C-y
抽取文本时,您将获得所选的行并将所有行一起附加到杀戮戒指条目。
答案 2 :(得分:3)
一个简单的解决方案是记录一个宏,将一条线从一个缓冲区复制到另一个缓冲区( f3 C-SCP Cn Mw Cx o Cy Cx o f4 ),然后执行宏( f4 )在你要复制的每一行上。
如果这是您的定期方案,您可以保存宏并将其绑定到密钥。
答案 3 :(得分:0)
根据确切的用例,我可能会将整个区域从第一行复制到最后一行,然后在新缓冲区中删除那些我不需要的行。
如果在新缓冲区中有较长的不需要的行要删除,则步骤9到11应替换为: