2009-02-28 312 views
5

我剛纔的問題似乎有點曖昧,我會改換:Vim的複製和粘貼

我有一個這樣的文件:

copythis abc 
replacethis1 xyz 
qwerty replacethis2 
hasfshd replacethis3 fslfs 
And so on... 

注: replacethis1,replacethis2,replacethis3, ...可以是任何文字

如何用「最少vim命令」替換「replacethis1」,「replacethis2」,「replacethis3」,..「copythis」字。我可以做

一種方式是通過下列步驟操作:

  1. 刪除 「replacethis1」, 「replacethis2」, 「replacethis3」,...利用 'DW'
  2. 複製 「copythis」 使用「YW '
  3. 將光標移動到「replacethis1」所在的位置並做'p';將光標移動到「replacethis2」所在的位置,並執行「p」等等...

有沒有更好的方式在VIM中執行此操作(使用較少數量的vim命令)?

回答

6

既然你改變你的問題,我會這樣做:

移動到第一個「replacethis1」並鍵入cw(更改單詞),然後手動鍵入「copythis」。

移動到下一個「replacethis」,點擊。 (重複上次操作)

移動到下一個 「replacethis」,打,

等等,等等。

如果「copythis」是一個小詞,我認爲這是最好的解決方案。

+0

,具體取決於您如何移至不同的待替換單詞,最好使用ciw(或caw)而不是cw。爲了順利工作,你需要在更換這個開始。 – user55400 2009-03-02 13:33:21

0

你試過字符串替換嗎?

%s/replacethis/copythis 

許多其他參數可用於微調替換。深入瞭解Vim的幫助以獲取更多詳細信息。一些更多的例子here

1
:%s/copythis/replacethis/g 

用replacethis替換所有出現的copythis。或者,您可以指定一系列行號,例如:

:8,10 s/copythis/replacethis/g 

注意,/ g最後會告訴它替換所有出現的事件。如果你離開它,它只會做第一個。

+0

請參閱我的更改後的問題 – 2009-02-28 08:08:21

+0

您已將這兩個術語顛倒過來。 – 2009-03-02 22:41:56

0

如果u需要基本相同的動作多次做 - 與下一行的第二個字一行交換第一個字,我說你可以錄製宏,並調用它,只要你需要

+0

請參閱我的意見問題 – 2009-02-28 08:07:18

1
  1. 創建的映射:

    :映射žcwcopythis^[

    (^ [是轉義字符,可以用Ctrl + V CTRL + [在vim鍵入)

  2. 轉到您要替換的每個單詞並按z

4

需要將數字包括在內, d是每行一個以上的實例:

:%s/replacethis\d/copythis/g 
3

鑑於「replacethis [1-3]」可以是任意的不相關的話,要做到這一點的最快/最簡單的方法全局將是:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g 

(請注意,您需要使用\ |讓管道起到「或」的作用。否則,vim將查找文字| 。字符)

1

我一直在爲此而努力了很久也一樣,我想我只是制定了清晰的方式:

使用的任何命令是乾淨的把copythis到寄存器R:

/copythis 
"rye 

然後去更換,並與r的內容替換它:

/replacethis 
cw<CTRL-R>r<ESC> 

那麼你可以n.n.n.n.n.n.n.爲他們的休息,或者如果他們瘋狂迪不同的只是去每個的開頭.

關鍵是更換和粘貼在一個步驟,因此您可以稍後使用.

0

您可以重新映射例如正常模式下的m鍵刪除光標下的單詞並粘貼緩衝區::nnoremap m "_diwP。 然後,您可以複製所需的單詞,將光標移動到要更換的單詞上並鍵入m

編輯:映射到m是一個壞主意,因爲它用於標記位置。但是你可以使用例如無論如何,我們都需要;