![Vim의 :s/// 대체 문자열에서 유니코드 16진수 이스케이프를 사용하는 방법은 무엇입니까?](https://linux55.com/image/144338/Vim%EC%9D%98%20%3As%2F%2F%2F%20%EB%8C%80%EC%B2%B4%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%2016%EC%A7%84%EC%88%98%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
대체 명령의 대체 문자열에서 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-expression
Vim에서 및 참조하세요 .:help nr2char()
또는 20AC
실제로 상수인 경우 를 입력하여 다음 :
s
#
something
#
<Ctrl-V>
u
20AC
#
g
<Enter>
을 제공 할 수 있습니다.
:s#something#€#g
:help i_ctrl-v
Vim에 무엇이 있는지 살펴보세요 .
답변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 함수 호출을 사용하는 것보다 파서에 직접 내장되어 있기 때문에 선호합니다.
그러나 이를 수행하는 더 쉬운(그리고 더 직접적인) 방법이 있었으면 좋겠습니다.