2017-04-21 17 views
2

例如,我有一個文本, 10 3 4 2 10,如圖4所示,10 ....如何在VI/VIM編輯器中用每種情況下不同的發現詞替換?

沒有我想用不同的話

我知道%S/10 /替換來改變各10 -words/gc但它只讓我替換爲yes/no的交互方式,但我想用replace1,3,4,2,replace2,4,replace3等不同的詞來更改每個出現的10個字符....

+0

在示例中顯示,替換詞有增量編號,那麼您需要什麼或替換可能是隨機的? – Sundeep

回答

3

替換每個出現10replace{index_of_match}

:let @a=1 | %s/10/\='replace'.(@a+setreg('a',@a+1))/g 

替換的10每次出現與字從預定義的數組:

:let b = ['foo', 'bar', 'vim'] | %s/10/\=(remove(b, 0))/g 

替換爲從預定義的陣列的字的10每次出現時,與匹配的索引:

:let @a=1 | let b = ['foo', 'bar', 'vim'] | %s/10/\=(b[@a-1]).(@a+setreg('a',@a+1))/g 

但是由於無論如何你都必須輸入任何單詞,第二個和第三個功能的好處是很小的。從SpoonMeiser看到「手動」解決方案的答案。

更新:作爲希望,在第二示例中的正則表達式的一部分的解釋:在文檔中

% =在每行上
s/<search>/<replace>/g = s裝置執行搜索&替換,g手段替換每一次出現。
\=將以下內容解釋爲代碼。
remove(b, 0)刪除列表b的索引0處的元素並將其返回。

因此第一次出現。行會%s/10/foo/g第二次,列表現在只有['bar', 'vim']所以行會%s/10/bar/g

注:這是一個快速草稿,不可能達到它的最佳&乾淨的方法,如果有人想要改進它,請隨時添加評論

+0

如果每個替換詞都不一樣?並感謝的人:) – rcShahi

+0

更新了我的答案 –

+0

好的,謝謝兄弟我是新的vi,所以它會很好,如果你詳細說明這個命令中使用的每個術語 – rcShahi

1

是否存在您想要的單詞的模式,或者您希望在每次出現要替換的單詞時輸入每個單詞的模式?

如果我用不同的詞替換「10」的每個實例,我可能會做一定程度手動:

/10 
cw 
<type word>ESC 
ncw 
<type word>ESC 
ncw 
<type word>ESC 

似乎沒有哪個過於繁重,如果每個字是不同的,有無論如何都要單獨打字。

+0

這將引發在我的情況的錯誤,並說「E486:找不到模式:10cw: – rcShahi

+0

@rcShahi這是因爲這意味着'/ 10 cw'這是很容易忘記,因爲它是明確的的vimuser您正在搜索。 10 –

+0

最後我得到了你的男人,現在我在笑我:) – rcShahi

相關問題