VIM의 기본 인코딩을 UTF-8로 설정하려면 어떻게해야합니까?


62

번역 된 문자열을 제공하는 오픈 소스 프로젝트에 기여하고 싶습니다. 요구 사항 중 하나는 제공자가 PO 파일의 인코딩으로 UTF-8을 사용해야한다는 것입니다.

Linux에서 VIM 7.3을 사용하고 있습니다. .po 파일을 올바르게 편집하고 저장할 수 있도록 VIM의 인코딩이 UTF-8로 설정되어 있는지 어떻게 확인할 수 있습니까?

답변:


64

Vim은 기존 파일을 읽을 때 파일 인코딩을 감지하려고합니다. 파일을 작성할 때 Vim은 감지 한 파일 인코딩을 사용합니다 (다른 방식으로 말할 때 제외). 따라서 UTF-8로 탐지 된 파일은 UTF-8로 작성되고 Latin-1로 탐지 된 파일은 Latin-1로 작성됩니다.

기본적으로 탐지 프로세스는 조잡합니다. Vim으로 연 모든 파일은 맨 위에서 유니 코드 바이트 순서 표시를 감지하지 않는 한 Latin-1로 간주됩니다. 바이트 순서 표시가없는 UTF-8 파일은 멀티 바이트 문자가 단일 문자 대신 문자 시퀀스로 버퍼에 표시되므로 편집하기가 어렵습니다.

최악의 경우, Vim은 기본적으로 Latin-1을 사용하여 버퍼의 텍스트를 나타냅니다. 따라서 바이트 순서 표시가 있는 UTF-8 파일 Latin-1로 다운 변환하여 손상됩니다.

해결책은 내부적으로 UTF-8을 사용하도록 Vim을 구성하는 것입니다. 사실 이것은 Vim 문서에서 권장되는 것이며 Vim이 기본적으로 Latin-1 편집기로 작동 할 것으로 기대하는 사용자들 사이에서 혼란을 피하는 것입니다.

에서 Vim을 .vimrc추가 set encoding=utf-8하고 다시 시작하십시오.

또는 LANGUTF-8이 선호하는 문자 인코딩임을 나타내도록 환경 변수를 설정하십시오 . 이것은 Vim뿐만 아니라 LANG텍스트를 어떻게 표현해야 하는지를 결정하는 소프트웨어에도 영향을 미칩니다 . 예를 들어, en미국에서 사용 US되는 UTF-8 ( utf-8) 로 인코딩 된 텍스트가 영어 ( )로 표시되도록 하려면을 설정하십시오 LANG=en_US.utf-8.

이제 Vim은 UTF-8을 사용하여 버퍼의 텍스트를 나타냅니다. 또한 파일에서 UTF-8 인코딩을 감지하기 위해 더 많은 노력을 기울일 것입니다. 바이트 순서 표시를 찾는 것 외에도 라틴 순서로 돌아 가기 전에 바이트 순서 표시가없는 UTF-8도 검사합니다. 따라서 더 이상 UTF-8로 코딩 된 파일이 손상되지 않으며 편집 세션 중에 UTF-8 문자를 올바르게 표시해야합니다.

Vim이 파일 인코딩을 감지하는 방법에 대한 자세한 내용 은 Vim 설명서 fileencodings옵션을 참조하십시오 .

Vim이 내부적으로 사용하는 인코딩 설정에 대한 자세한 내용 encoding 옵션을 참조하십시오 .

다시 디스크에 파일을 기록 할 때 사용되는 인코딩을 무시해야하는 경우, 참조 옵션을 .fileencoding


3
실제로 편집을 귀찮게 할 필요조차없는 것 같습니다 .vimrc. 실제로 인코딩의 기본값은 "latin1"또는 $ LANG의 값이며 시스템에서이 값은로 설정되어 en_US.UTF-8있습니다. 이런 이유로 상자 밖으로 :set encoding제공 encoding=utf-8합니다. 예상대로 LANG이 설정되어 있지 않으면을 :set encoding제공합니다 encoding=latin1. 큰 답변 주셔서 감사합니다!
Paolo

그것은 일반적으로 유용 할 수 있으므로 대답에 추가했습니다.
MetaEd

latin1로 인코딩 된 파일을 열면이 설정으로 파일 인코딩이 변경되지 않습니까? Vim이 어떻게 파일 인코딩을 그대로 유지하면서 새 파일에 대해 utf-8을 선호 할 수 있습니까?
David Kennedy

@DaveKennedy Vim은 파일이 분명한 Latin-1 인 경우에만 파일을 Latin-1로 취급 할 수 있습니다. 인코딩이 모호 할 때는 Vim을 선택해야합니다. 예를 들어, 7 비트 ASCII 코드 만 포함 된 파일은 Latin1은 유효하지만 UTF-8 등도 유효합니다. 이러한 파일은 일반적으로 UTF-8로 처리됩니다. 이 결과를 피하는 한 가지 방법은 파일 인코딩을 명확하게 만드는 것입니다. 내가 본 트릭은 0xF7 코드 문자열을 추가하는 것입니다. UTF-8에서 0xF7은 유효하지 않습니다. 그러나 Latin-1에서는 나누기 부호 (÷)를 나타냅니다. Vim은 보통 파일이 Latin-1이라는 결론을 내립니다.
MetaEd

4

vimdoc 에 따르면 vim은 파일 인코딩을 자동으로 감지하려고 시도하므로 기존 파일 을 편집 하는 것이 좋습니다.

로 원하는 경우 언제든지 인코딩을 강제 할 수 있습니다 :set fileencodings=utf-8. 여기 에서 설명서를 찾을 수 있습니다 .


6
fileencodings = utf-8은 Vim이 입력 파일을 UTF-8로 인식하도록하지만 Latin-1 로의 손실 변환을 수행합니다. 또한 Vim이 UTF-16을 인식하지 못합니다. 더 나은 해결책은 Vim을 기본 1 바이트 편집기에서 기본 멀티 바이트 편집기로 바꾸는 encoding = utf-8을 설정하는 것입니다.
MetaEd

@MetaEd 당신은 당신 의 코멘트를 정교화 하기 위해 이것 에 대답 할 수 있습니까 :)
hhh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.