2010-06-07 67 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

相關問題