Vim의 :s/// 대체 문자열에서 유니코드 16진수 이스케이프를 사용하는 방법은 무엇입니까?

Vim의 :s/// 대체 문자열에서 유니코드 16진수 이스케이프를 사용하는 방법은 무엇입니까?

대체 명령의 대체 문자열에서 16진수 유니코드 이스케이프를 사용하고 싶습니다(예: U+20AC 문자 사용).

:s#something#\x{20AC}#g

위의 예는 대체 문자열에 Perl 구문을 사용하기 때문에 작동하지 않지만 Vim에서 작동하기를 원하며 16진수 값(2 또는 4)에 따라 결정되는 다른 많은 가능한 유니코드 문자에서도 작동하기를 원합니다. 숫자 또는 그 이상). 이것은 스크립트에 의해 생성된 일련의 대체 문이므로 대체 문 자체는 사용하기 더 쉽기 때문에 ASCII로만 설정하고 싶습니다. 올바른 구문이 있어야 한다고 생각하는데 찾을 수 없습니다. \%u20AC는 검색 모드에서는 유효하지만 대체 문자열에서는 유효하지 않습니다. 이는 대화식으로 수행되지 않으므로 CTRL-V + 4개의 16진수 방법은 작동하지 않습니다.

답변1

:s#something#\=nr2char(0x20AC)#g

:help sub-replace-expressionVim에서 및 참조하세요 .:help nr2char()

또는 20AC실제로 상수인 경우 를 입력하여 다음 : s # something # <Ctrl-V> u 20AC # g <Enter>을 제공 할 수 있습니다.

:s#something#€#g

:help i_ctrl-vVim에 무엇이 있는지 살펴보세요 .

답변2

다른 답변도 좋습니다. 문자열 보간은 :execute스크립팅에 특히 좋은 방법이므로 이에 대해서도 언급하겠습니다.

당신은 그것을 사용할 수 있습니다:help <Char>큰따옴표로 묶인 문자열의 표기법:

let char = "\<Char-0x20AC>"
execute 's#something#' . char . '#g'

또는 다음을 통해 숫자를 변환하십시오 nr2char().

let value = 0x20AC
execute 's#something#' . nr2char(value) . '#g'

답변3

더 많은 문서를 읽은 후 대체 표현식을 사용하여 이 작업을 수행하는 매우 복잡한 방법을 하나 이상 발견했습니다.

:s#something#\="\<Char-0x20AC>"#g

Vimscript 함수 호출을 사용하는 것보다 파서에 직접 내장되어 있기 때문에 선호합니다.

그러나 이를 수행하는 더 쉬운(그리고 더 직접적인) 방법이 있었으면 좋겠습니다.

관련 정보