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.