2012-01-24 97 views
38

我在Mac 10.7.2上運行vim 7.3,並且在剪切和粘貼幾行代碼時遇到了一些麻煩。在我的舊版Linux設置(它被盜了,所以我不知道版本)時,我可以多次輸入「dd」,然後「p」將它們全部撤回。例如:輸入:「dd dd」,兩行將被刪除。現在輸入「p」和這兩個行都被粘貼回緩衝區。在vim中剪切和粘貼多行

我知道我可以通過鍵入「2dd」,然後「p」來完成我想要的操作,但我希望能夠在不計算提前行數的情況下「dd」-out行。

任何想法?

+2

不計算行提前用「relativenumbers」,以顯示相對於光標的行號。並且從7.4開始設置「數字」和「相對數字」可以使您的光標處於絕對位置並與其他位置相對的行號得到兩全其美的效果。然後像@Giovanni建議的d2d(兩行)做起來更容易。 –

+1

這真棒,但對於任何嘗試這個的人來說,它實際上是「數字」和「相對數字」,而不是「數字」和「相對數字」:) – user3640967

回答

75

您是否考慮過使用visual mode

你可以隨便去:

  • V
  • 選擇要砍不計
  • d
  • 轉至要粘貼
  • p
  • 一切

由於您每行按一個鍵而不是兩個,所以這應該會產生大約爲dd方法的一半的按鍵次數。如果您使用5j(或類似)一次選擇多行,則可獲得獎勵積分。

+9

對於整行,使用'V'(Shift + V)更容易。 –

+0

好的@GregHewgill,根據你的建議編輯。 –

+1

我會說我不想這樣做,因爲我「喜歡」我的舊工作流程。但是,我只是試了一下,而且它更好。謝謝! – spinlock

5

不確定這是否足夠接近您所嘗試的內容,但您可以做的一件事是使用特定的註冊表,並將您的註冊名稱大寫。這告訴VIM追加到寄存器,而不是取代它,所以如果你有行:

one 
two 
three 

就可以進入

"qdd 
"Qdd 
"Qdd 

,隨後如果輸入

"qp 

它會粘貼回原線

+0

從問題來看,它看起來像是映射到'd'。 – romainl

1

我同意@Ben S.,這是首選的方式acco mplish this但如果你只是想複製你的舊行爲,你可以重映射dd追加到指定的寄存器,然後映射p從該寄存器粘貼並清除它。
這會造成p只能使用dd刪除的東西(使用d}刪除到段落末尾不會將文本放入正確的寄存器以後粘貼)的缺點。

以下添加到您的vimrc

noremap dd "Ddd    "Appends the contents of the current line into register d 
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out 

,如果你不想粘貼來清除寄存器

noremap p "dp    "Paste from register d 

的內容,但是這將導致登記而沒有結算增長它出

2

要行號剪切和粘貼(做:set number查看行號),對於行x到y做:

:x,yd 

,或者如果你的光標已在直線x,做

:,yd 

然後,轉到要粘貼,然後按p

13

您可以鍵入:

d<n>d 

其中<n>是您要剪切的行數,然後您可以將其粘貼到:

p 

例如,剪切和粘貼3行:

d3d 
p 
+0

很好的答案謝謝 – kapil