2014-01-15 25 views
4

我有两个缓冲区。我想将第一个缓冲区中的第2,5,9和10行复制到第二个缓冲区(只需追加到第二个缓冲区)。除了复制和一次一行以外,是否有任何优雅的方式可以这样做?如何在Emacs中将多行从缓冲区复制到另一行?

+1

这是一个任意的例子,或者你想用这些行号重复多次的特定情况? – phils

回答

3

一个简单的解决方案将被记录的宏拷贝从一个缓冲器的线到另一个(F3 C-SCP的C n的Mw CXö赛扬CXöF4)在每行上,然后执行该宏(F4)你想复制。

如果这是您的反复出现的情况,您可以保存宏并将其绑定到密钥。

+0

这就是我想要的答案。此外,刚刚学会了如何使用微型。 –

3

对于现成的功能,我建议您看看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-SPCMw为RET

个交换机缓冲器和...

猛拉矩形:CX RY

+0

不错。我没有注意到多个游标使用'杀死矩形'。该库*真的需要一种很好的方式来标记将要进入单光标模式的一组光标,然后切换到多光标模式以编辑它们。你可以通过设置标记并重复调用'mc/pop-mark'来做到这一点,但这比实际上更笨拙。 – phils

+0

@assem,你可以使用'(interactive“nLine number:”)'在函数中保存几行文字。 – juanleon

+0

@ juanleon,非常好,谢谢。我已经按照你的建议更新了样本 – assem

0

根据具体使用情况下,我可能会在整个区域从第一行复制到最后一行包含性,然后在新缓冲区中杀掉那些我不需要的行。

  • 1移动到第一行的开头复制
  • 2.C-空间设置标记以开始标记的区域
  • 3.移动的端部最后一行复制
  • 4.Mw拷贝区域
  • 5.C-X B缓冲器名RET转到第二缓冲器
  • 6。移动到插入位置在第二缓冲器
  • 7.赛扬插入(抽出)区域
  • 8.CX CX去猛拉区域
  • 9的开端。Cn重复,直到你到达第一个不需要的行
  • 10.CK CK删除不想要的线
  • 11.转到9,直到完成

如果存在的不想要的线更长的区段是删除在新的缓冲器,步骤9.到11.应该用类似的东西代替:

  • 9.移动到开始的不想要的线
  • 10.C-空间组标记更长的拉伸的开始标记的区域
  • 11.移动到的不想要的线较长拉伸的端
  • 12.CW杀区域
  • 转到9直至完成
4

您可以使用命令append-next-kill,势必C-M-w,更多的文本添加到杀环上的最新条目。一个M-w命令之前正确使用它,像这样:

  • 马克和副本线路2:C-SPCC-nM-w
  • 移至行5
  • 马克和追加拷贝它:C-SPCC-nC-M-wM-w
  • 移动到第9行...

...等等。

当你用C-y将文本抽出时,你会得到你选择的行,并将它们附加到杀戒环中。

相关问题