vim에서 현재 버퍼의 인코딩을 어떻게 찾습니까?


89

vim (또는 gvim)으로 일부 파일을 편집한다고 가정 해보십시오. 파일 인코딩에 대해 전혀 모르고 UTF-8 또는 ISO-8859-1인지 또는 무엇인지 알고 싶습니다. 어떻게 든 vim에게 어떤 인코딩이 사용되는지 보여줄 수 있습니까?

답변:


104

파일 인코딩 설정은 현재 버퍼의 인코딩을 보여줍니다.

:set fileencoding
fileencoding=utf8

일반 텍스트 파일의 인코딩을 결정하는 일반적인 방법은 없습니다. 인코딩을 나타내는 BOM이라고하는 UTF-8 파일을 제외하고는 정보가 파일 자체에 저장되지 않기 때문입니다. 이것이 xml 및 html 파일에 문자 세트 메타 태그가있는 이유입니다.

'인코딩'설정으로 특정 인코딩을 시행 할 수 있습니다. 보기 :help encoding:help fileencoding편집기는 이러한 설정을 처리하는 방법에 대한 빔한다. vimrc에 여러 파일 인코딩 설정을 추가하여 vim이 나열된 설정을 기반으로 검색을 시도 할 수도 있습니다.


1
완전한. 다소 직관적 인 경우에도 마찬가지입니다. 감사합니다!
innaM

7
불행히도, 정확하지 않습니다. Vim 이 읽고있는 파일의 인코딩을 찾을 수 없습니다 . 파일에 기록되지 않았습니다. 파일에서 사용 가능한 문자를 기반으로 추측 할 수 있습니다. 예를 들어 텍스트 "abcdef"가있는 파일은 여러 인코딩으로되어있을 수 있습니다. 실제로 모든 문자가 해당 문자를 지원하기 때문에 "šđčćž"가있는 파일은 CP1252에있을 것입니다. 따라서 어딘가에서 인코딩을 읽는 것이 아니라 인코딩이 무엇인지 추측하고 올바르게 표시하는 것을 기반으로합니다.
Rook

6
여기서 수행하는 작업 은 파일 내용을 관찰하여 인코딩을 명시 적으로 설정 하는 것입니다. vim에서 여러 인코딩을 시도하려면 파일을 열 때 _vimrc의 옵션에 여러 인코딩을 넣으십시오.
Rook

@ldigas, 피드백 주셔서 감사합니다, 나는 그것에 대해 좀 더 명확하게 답변을 업데이트했습니다 (나는 희망합니다!)
jtimberman

2
아마도 BOM이 1이라고 언급 할 가치가 있습니다. UTF-8에 고유하지는 않습니다. UTF-8 은 다른 BOM과 다르지만 2) 필요하지 않으며 종종 UTF-8에서 찾을 수 없습니다 .
ruffin

13

파일의 인코딩은 파일의 어느 곳에서나 명시 적으로 언급되지 않습니다 . 따라서 VIM 및 기타 응용 프로그램은 인코딩을 추측해야합니다. 이를 수행하는 정식 방법은 chardet응용 프로그램을 사용하는 것이며 VIM 내에서 다음과 같이 실행할 수 있습니다.

:!chardet %

jtimberman이 제공 한 답변은 현재 버퍼 의 인코딩을 보여 주며 이는 디스크의 파일과 동일한 인코딩이 아닐 수 있습니다. 따라서 chardetVIM이 항상 특정 인코딩 (예 : UTF-8)을 사용하도록 구성된 경우 VIM과 다른 인코딩이 표시되는 경우가 있습니다.

좋은 점은 chardet추측에 대한 신뢰 점수를 제공하는 반면 VIM은 \ x7F (ASCII 127)보다 많은 문자가없는 경우 인코딩을 추측하는 데 잘못 사용될 수 있다는 것입니다. 예를 들어, 하나를 추가하는 אPHP 코드의 긴 파일은 만드는 chardet파일이라고 생각 ISO-8859-2약간 긴 문구를 추가하는 반면, 0.72의 신뢰와 שלום, עולם!‏UTF-8 0.99의 신뢰 점수를 제공합니다. 두 경우 모두 set fileencoding?보여 주었다 UTF-8디스크에있는 파일이 UTF-8 때문에 아니지만, VIM은 내부적으로 UTF-8을 사용하도록 구성되어 있기 때문이다.


OS 전체에서 chardet의 가용성에 대해 언급하는 것이 좋습니다.
Soundararajan

@ Soundararajan : 데비안과 CentOS 만 사용한다고 언급하지는 않습니다. 그러나 관련 정보가있는 경우 답변을 편집하도록 초대되었습니다. 감사!
dotancohen

VIM 내부에서 수행해야 할 필요가 없습니다 chardet <file>. 외부에서 수행하는 것이 좋습니다 . 여전히 좋은 제안입니다.
Lepe

-1

나는 그것을 발견했다 : https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

Vim이 올바른 인코딩을 감지하지 못한 경우 다른 인코딩을 사용하여 파일을 다시로드 할 수 있습니다.

:e ++enc=<encoding>

어디 encoding있을까cp850, ISO-8859-1, UTF-8, ...

dotancohen이 제안한대로 file yourfilename인코딩을 찾거나 Linux 배포판에서 chardetect제공 python-chardet하거나 uchardetLinux 배포판에 따라 사용할 수 있습니다 .


현재 인코딩을 찾는 방법에 대한 질문에는 대답하지 않습니다. 대신이 명령은 버퍼에 다른 인코딩을 강제합니다.
Ruslan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.