2012-06-19 35 views
2

我是正確理解的幫助下,該定義(VIM)的正則表達式:掩蓋文字與圖案

:range s[ubstitute]/pattern/string/cgiI 

表明,該字符串的一部分確實只是字符串進行使用,即模式不允許?我想這樣做是在與X * N個符號位置M做更換說任何N個符號構成,所以我也希望用這樣的:

:%s/^\(.\{10}\).\{28}/\1X\{28}/g 

不工作,因爲\{28}字面解釋。

正在編寫28 XXXXX ... X在替換部分唯一的可能性?

+1

在Perl中你可以使用'S /正則表達式/「X」×28/ge'。 – Qtax

回答

2

您可以通過\=在替換零件中使用表達式。你必須通過submatch()訪問比賽,並與靜態字符串,您可以通過repeat()生成一起加入吧:

:%s/^\(.\{10}\).\{28}/\=submatch(1) . repeat('X',28)/g 
2

在替換部分中允許的唯一正則表達式構造是編號組:\1 \2 \3等。重複構造{28}在那裏是無效的,雖然這是一個聰明的想法。你將不得不使用28個X's。

+0

當然,你總是可以濫用Vim的緩衝區來避免手動輸入28個X(即在插入模式下輸入命令,用'28aX'完成,將其粘貼在緩衝區中,然後將緩衝區的內容加載到Ex模式中)。 –

1

另一種替代方法是在更換部分地使用表達式:與submatch(1)獲得

:%s/^\(.\{10}\).\{28}/\=submatch(1).repeat("X",28)/g 

第一匹配組。欲瞭解更多信息,請參閱:h sub-replace-expression