2011-08-23 168 views
60

什麼是用剪貼板的內容替換多行的最佳方式是什麼?多次粘貼

我遇到的問題是,當我拉出一條線並粘貼到另一條線上時,「yank」被我替換的線替換。現在,如果我想用同一條線替換另一條線,我必須恢復並再次抽出。

有一個更好的方法來做到這一點。

回答

76

我有這個在我的.vimrc:

xnoremap p pgvy 

(注:這將使用默認寄存器才起作用,但這種映射很容易記住)。寫一個更精細的版本將是可能的。此外,你仍然可以使用P來獲得舊的行爲。

+23

聰明。'p'粘貼,'gv'重新選擇最初選擇的內容。 'y'再次複製它 – Amjith

+0

@Benoit感謝,似乎工作 – jwerre

+0

如果得到'xnoremap:command not found',我應該怎麼做?: -/ –

11

當你在Vim上粘貼一個選擇時,它會用選擇內容替換默認寄存器。如果粘貼在選擇消滅剪貼板寄存器的內容則很可能是你有下面一行在.vimrc

set clipboard=unnamed 

一種選擇是刪除和使用顯式剪貼板註冊"+

另一種選擇是使用任何其他明確命名的寄存器(az)。在第一次粘貼之後,將該行復制回"c,然後使用"cp從那裏粘貼。

+0

+1不錯,對於''+' – toopay

+0

實際上默認的(這裏是在Ubuntu上)是clipboard = autoselect;仍然,感謝迄今爲止最優雅的答案 – Tobu

7

使用np其中n是你想要粘貼多少行的時間數,例如3p將粘貼3行。

+6

當你想粘貼時不起作用在不連續的行上使用相同的行 – Tobu

+0

@Tobu,但它確實回答了這個問題的標題'你怎麼粘貼多次' – icc97

11

我經常使用的另一個註冊表,副本,需要進行一些名爲註冊表"ay線,然後從那裏"ap

17

"0粘貼應該有你抽出的內容。輸入起來有點繁瑣,但是"0p應該做你想做的。

或者,不要選擇並替換舊的線路。如果您搜索到這些行,只需點擊n.(在初始p之後),然後當它們全部粘貼時,根據需要執行ndd,然後再按n. s。

移動到Vim時,我需要做的最大的心智轉換是弄清楚如何按順序應用組編輯。即而不是在一條線上做一堆編輯,然後在另一條線上做一堆相同的編輯,我會在一堆線上進行第一次編輯(使用.效果很好),然後對一堆進行第二次編輯或者,宏的使用可能會有所幫助,因爲它們非常棒,但有時在「複雜」更改中正確工作會稍微繁瑣一些。

+0

感謝您的提示! – mt22

+2

聽起來像一個正則表達式,確認':%s /.../.../ gc'類型命令可能更接近你想要的位置 – Milimetric

+0

@Milimetric +1不知道你可以這樣確認。 – ngks

1

而不是使用複製/粘貼,使用文本對象命令(如ciw)來更改內部單詞通常會更好。此方法的優點是可以使用.重複命令輕鬆重複。

  1. yiw拉內字(在光標下複製字,說「第一個」)。
  2. ...將光標移到另一個單詞(例如「秒」)。
  3. ciw<C-r>0將「second」更改爲「first」(即Ctrl-R)。
  4. ...將光標移到另一個單詞(比如「third」)。
  5. .更改「第三」,將其替換爲「第一」。