Stack Exchange网络由183个问答社区组成,包括堆栈溢出是开发人员学习、分享知识和建立职业生涯的最大、最受信任的在线社区。
提出问题,找到答案,并与团队堆栈溢出协作。
提出问题,找到答案,并与团队堆栈溢出协作。探索团队
团队
工作问答
在一个结构化且易于搜索的位置内连接和共享知识。
有没有一种简单的方法可以搜索与图案匹配的所有线条,提取线条上的数字并修改它?
我正在玩一个游戏配置文件,想把所有XP数字加倍,以消除一半的无聊研磨。这些行看起来像这样(例如屏幕截图中的第64行)。
经验要点:###
我只想把这些行上的数字加倍。
我尝试执行以下操作来匹配正则表达式并创建匹配组,但遗憾的是,它说“找不到模式”,但看起来应该匹配吗?
:s/经验点:(\d+)/\=次级比赛(1)*2/g
谢谢!
%s/\(经验值:\)\@<=\(\d\+\)/\=submatch(2)*2/g
\(...\)@<=是锚定点
\(...\)@<=
\+而不是+用于匹配多个匹配项
\+
+
\z秒
正则表达式?讨厌!
以下是非正则表达式版本:
从任何带有数字的行开始键入:
q个q个全选剪下c(c)我w个Ctrl-R键=Ctrl-R键-*2输入Esc公司q个u个
然后运行命令:
:g/经验点:/norm@q个
q个q个:开始将宏录制到寄存器“”q“,
“”q“
全选:移动到行上的下一个数字并递增,
剪下:再次将其减小,返回其原始值。我们只使用全选作为移动到数字的快捷方式,
c(c)我w个:更改光标下的单词。即数字,
Ctrl-R键=:输入表达式寄存器。这允许您执行计算并将其结果输入缓冲区,
Ctrl-R键-:输入小删除寄存器的内容,即您正在更改的数字,
*2:乘以2。如果你在电话号码上8,现在命令行有了内容8*2,
8
8*2
输入:执行计算。如果你的光标在数字上8,这将进入16进入缓冲区,
16
Esc公司:离开插入模式,
q个:停止录制,
u个:撤消您刚才所做的更改,将缓冲区恢复到其原始状态!
现在寄存器中有一个宏“”q“这将使光标后的第一个数字在每次运行时加倍。我们可以使用:克在包含文本的每一行上运行此宏的全局命令经验要点:。
:克
经验要点:
我会这样做:
:%s/经验点:\zs(\d\+)/\=子匹配(1)*2/g
如前所述,找不到模式是因为+需要在Vim逃走
为了确保您不会丢失经验要点:我们添加了\z秒之后开始更换。
哇,已经有三个答案了,但没有提到:克。
包含文本模式的所有匹配行上的双精度数字
只是以下情况的特例:
执行<命令>在所有行上匹配<图案>
<命令>
<图案>
哪个是这个的作业:help:全局:
:help:全局
:g/<模式>/<命令>
在这种情况下:
经验点
s/\d\+/\=子匹配(0)*2
它给出了:
:g/经验点/s/\d\+/\=子匹配(0)*2
必需,但从未显示
Required, but never shown
单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策。