2014-01-15 26 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將文本抽出時,你會得到你選擇的行,並將它們附加到殺戒環中。

相關問題