2008-12-19 107 views
72

我想在一個寄存器中抽出一行:"{register}y但不覆蓋寄存器中的內容。我經常需要在寄存器中複製不連續的行,並且我希望有時使用像堆棧這樣的寄存器。如何將行添加到vim寄存器而不覆蓋它

例子:

line1 
line2 
line3 

我想複製line1,通過將其上的光標,並進入"ay,那麼回事line3"ay。然後,當我將要做"ap,BOTH line1 AND line3將被粘貼。

這可能沒有插件?有插件?

+0

非常適合製作文件頂部定義的快速列表。 – 2011-11-24 06:40:16

回答

110

如果你想追加到一個指定的寄存器使用它的相應的大寫字符。 即在您的例子:

 
"ayy 
"Ayy 
"ap 
+8

是否有任何可能的方法追加到未命名的寄存器? (主要的) – Zaffy 2013-03-24 12:28:04

+3

@ Zaffy http://stackoverflow.com/questions/18536511/vim-how-to-append-yanked-text-to-unnamed-register – PonyEars 2013-09-28 08:58:30

11

只是爲了擴大MarkB的反應,你知道,你也可以使用標記來選擇文本塊爲你猛拉?

轉到要插入的塊的第一行,並在選擇一個字母作爲標記後輸入標記命令。

ma (entered in command mode, i.e. no colon) 

然後去要抽出並輸入命令塊的底部:

:'a,.ya A 

這個命令的意思採取從包含我的標記行的文本塊稱爲達當前行並將其放入緩衝區a中。與MarkB提及的規則相同,使用小寫緩衝區名稱來覆蓋緩衝區。使用大寫緩衝區名稱追加到緩衝區。所以在這種情況下,這將附加到緩衝區a的內容。

N.B.用於標記的「a」與用於選擇註冊的「a」無關。 (AFAIK,但YMMV)

順便說一句'a(撇號a)是指包含標記a的行。 `a(反引號a)是指當你輸入ma時光標下的字符。

`ad`b (also entered in command mode) 

是有用的,因爲它會刪除打上標記一到字符只是之前,你已經打上標記B的字符的字符之間的文本。

相關問題