gVim中的复杂替换

时间:2012-12-14 14:59:42

标签: vim

对于Minecraft来说,我最近一直是一个可怕的人。我已经过度修改了它,我需要完全重写它们的ID。 唯一的问题是......它需要大约几个小时才能重新写入它们,更不用说它们中的任何一个是否与原始游戏相冲突。因此,为了节省时间,我想我会使用Vim,但在阅读了这里的几个有用的帖子后,我仍然只知道关于替换功能/命令的最小数量。这是我正在尝试做的事情: 替换此

I:exampleModnamePath.id=16389
I:exampleModnamePat2.id=19657

有了这个

I:exampleModnamePath.id=20000
I:exampleModnamePath.id=20001

这种情况持续了一段时间,对于那些回答的人,请告诉我它是如何工作的,所以我不必一直问这些问题吗?

2 个答案:

答案 0 :(得分:1)

供你细读:

:let g:num = 1
:g/\.id=\d\+$/exec 's!\.id=\d\+$!.id='.g:num.'! | let g:num=g:num+1'

这是我在电子书中(重新)编号章节的代码的略微简化版本。

简而言之:使用:g在受影响的线路上运行某些东西;使用:exec生成/运行新的替换命令并增加计数器。尝试了一次,并惊讶地发现这个技巧奏效了。受到我之前玩弄:g//s///组合的启发。

答案 1 :(得分:0)

我不确定您使用的规则是选择用于替换的号码,但如果您需要的话 只是一个新的数字,不会与以前的数字冲突,您可以尝试更换第一个数字 在一个未使用的范围内的东西。有点像用76389替换16389

为此,您可以使用此:s/Path.id=.\(.*\)/Path.id=7\1

那将搜索字符串Path.id =后跟一个字符,然后搜索一组更多字符。 我将用字符串Path.id = 7和之前选择的组替换它。

你可以选择在Path.id之前添加字母以便仅匹配某些类型的路径。