2013-02-02 4 views
2

나는 vim에서 유니 코드 문자를 찾는 방법에 대해 힌트를 보았습니다 : help regexp와 \ % u를 사용했지만 16 진수로 정의 된 유니 코드로 텍스트를 대체하는 방법을 알지 못했습니다 캐릭터.Vim이 유니 코드 문자로 바꾸기

DefaultKeyBindings.dict에는 주석에 해당 행에 매핑 된 문자를 인쇄하는 주석이 필요하다는 특수한 상황이 있습니다.

시작하기 :

blah blah...\U2234 

명령 :

:s/\v.*\\U(\d{4})/& \/\*\\\\%u\1 \*\/ 

결과 :

blah blah...\U2234 /*\%u2234 */ 

목표 :

blah blah...\U2234 /* ∴ */ 

답변

7

16 진수 유니 코드 값의 문자열 표현을이 문자가 나타내는 실제 문자로 변환해야합니다. 이 :help sub-replace-expression를 통해 대체에 포함 할 수 nr2char()위한 작업입니다 :

:substitute+\v.*\\U(\d{4})\zs+\='/* '.nr2char(str2nr(submatch(1),16)).' */'+ 

Protip : 사용 다른 분리기 (내가 / 이상 +를 선택했다), 당신은 탈출 할 필요가 없습니다.

+0

Ha,'\ zs'와'str2nr()'을 잘 사용하여 더 잘 대답 해주세요. ''encoding ''이''nr2char()'을 동작 시키려면 UTF-8로 설정해야합니다. [': h nr2char()'] (http://vimdoc.sourceforge.net/htmldoc/eval.html# nr2char % 28 % 29). – glts

+0

훌륭한 답변입니다. 고맙습니다. – user1992284

2

대체 텍스트의 표현식을 \=과 함께 사용할 수 있습니다. 이를 실행 가능한 솔루션을위한 nr2char() 함수와 결합하십시오. 다음은 시작이다 :

s^.*\\U\(\d\{4}\)^\=submatch(0).' // '.nr2char(printf('%d','0x'.submatch(1))) 

이것은 nr2char() 기능에 의해 필요에 따라 내가 진수로 진수의 변환 printf()를 사용

Bla bla ... \U2234 // ∴ 

에 선

Bla bla ... \U2234 

변환합니다. 나는 이것이 향상 될 수 있다고 확신한다.

이 작업을 수행하려면 'encoding'을 UTF-8로 설정해야합니다 (:h nr2char() 참조).

관련 문제