2010-06-07 61 views

回答

9

Vim有一个str2nr()函数可以将不同数字表示转换为它们的十进制值。要转换的十六进制值,你可以使用这样的:

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16) 
+0

哦。非常感谢你,你的方法非常有用。 但是如果语句中有[a-f],则该方法失败。 – stefanzweig 2010-06-07 10:51:17

+0

@stefan:哎呀,当然是:),我应该延长比赛还包括那些字符... – sth 2010-06-07 11:07:59

+0

非常感谢。它工作肯定。 – stefanzweig 2010-06-08 12:46:52

2

你的代码几乎是好的,但是,根据文档:

当替代字符串开始以“\ =”的余数被解释为 表达式。这不会递归地工作: 里面的替代函数()函数表达式不能使用“\ =”作为替代字符串。

所以,你可以更改您的代码

%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2)) 
+0

嗨ZyX, 非常感谢。我会尝试你的方法。现在我有一个很好的方法来转换我的日志。 :-) – stefanzweig 2010-06-08 12:48:16

+1

如果你在上半部分没有改变任何东西(只是匹配),你可能要考虑用'\ zs'来改变替换字符串的起始位置: – rampion 2010-06-08 13:28:52

+0

'%s/pad(。* )= \ zs0x [0-9a-fA-F] \ +/\ = print(“%d”,submatch(2))' – rampion 2010-06-08 13:43:39

相关问题