2010-06-07 5 views

답변

9

Vim은 다른 숫자 표현을 십진수 값으로 변환하는 str2nr() 함수를 가지고 있습니다. 문서에 따르면,

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

에 코드를 변경할 수 있습니다. 고맙습니다. 당신의 방법은 매우 유용합니다. 하지만 명령문에 [a-f]가 있으면 메소드가 실패합니다. – stefanzweig

+0

@stefan : 물론 그렇습니다. :) 해당 문자를 포함하도록 일치 항목을 확장해야합니다. – sth

+0

대단히 고마워요. 그것은 확실히 작동합니다. – stefanzweig

2

귀하의 코드는 거의 확인하지만, : : 16 진수 값을 변환하려면이처럼 사용할 수

대체 문자열 시작 \ "="를 가진 나머지는 표현식으로 해석됩니다. 재귀 적으로 작동하지 않습니다. 안에 substitute() 함수가 있습니다.이 표현식은 대체 문자열에 "\ ="을 사용할 수 없습니다.

그래서, 당신은 오

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

안녕 ZyX, 대단히 감사합니다. 나는 너의 방법을 시도 할 것이다. 이제 로그를 변환하는 좋은 방법이 있습니다. :-) – stefanzweig

+1

만약 당신이 처음 반쪽 (그냥 매치)에서 아무것도 바꾸지 않는다면, 대체 된 문자열의 시작 부분을 바꾸기 위해'\ zs '를 사용하는 것이 좋습니다 : – rampion

+0

'% s/pad (. *)) = \ zs0x [0-9a-fA-F] \ +/\ = print ("% d", submatch (2))' – rampion

관련 문제