fenc, enc 등을 설정해도 한글이 깨져보이는 경우가 있다.

이땐

:set ++enc=euc-kr 

을 하면 잘 보인다.. 

전체적으로 vim 에서 인코딩 옵션들이 어떻게 동작하는지 정리해야한다.

지금은 급하니 스킵.




출처 : http://kldp.org/node/45359

한글이 UTF-8로 인코딩된 경우가 있는 데이타파일을
가끔 열때가 있죠. 이때 아래의 방법으로 제대로 볼 수 있습니다.

set tenc=korea
set enc=utf-8

tenc는 termencoding 값을 설정하는것이고
enc는 encoding 값을 설정하는 겁니다.

.vimrc에
set fileencodings=utf-8,euc-kr
만 하면 자동으로 utf-8인지 euc-kr인지 자동판별해서
fileencoding 값을 정해 줍니다

저장하면 새파일이면 터미널의 인코딩대로 저장되고
있던파일이면 원래 파일 인코딩대로 저장됩니다
만약 인코딩을 바꾸려면
:set fileencoding=utf-8
:w
하면 utf-8로 바뀌어서 저장됩니다.
반대 경우도 마찬가지..






출처는 아래와 같습니다 ~

http://vany.tistory.com/trackback/218

 

예전에 간단히 Vim 인코딩과 한글입출력에 관한 글을 쓰고 나서, 브니군이 locale에 따라 자동으로 설정하는 방법을 올렸었다.  그리고 벌써 3년 가까이 세월이 흘렀다.  좀 있으면 빼도 박도 못한 30대가 되는 기념으로 추가정보를 좀 끄적거려 볼까 한다.


먼저 브니군이 작성했던 내용을 약간 가다듬으면(?) 다음과 같다.
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set termencoding=utf-8
else
    set termencoding=cp949
endif


위의 내용을 설명하면 이렇다.
우선 Vim 내부적으로 사용되는 인코딩을 utf-8으로 설정한다.
set encoding=utf-8

그리고 읽어들인 파일의 인코딩을 ucs-bom,utf-8,cp949,euc-kr,latin1 순서로 검사해서 자동으로 설정한다.
set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1

lang 변수에 설정된 인코딩 정보를 확인해서 utf-8인 경우에는 터미널 인코딩을 utf-8으로 설정하고,
그 밖의 경우에는 터미널 인코딩을 cp949로 설정한다.
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set termencoding=utf-8
else
    set termencoding=cp949
endif


vim 실행 후에 다음과 같이 입력해서 현재 인코딩 상황을 살펴볼 수 있다.
:set encoding? fileencoding? termencoding?

너무 기니까 줄여서 다음과 같다.
:set enc? fenc? tenc?


.vimrc에 위에서 소개한 내용을 넣어두면, 대부분의 상황에서 인코딩 설정이 자동으로 잘 잡힌다.

대부분 잘 된다는 말은, 물론 잘 안 되는 경우도 있다는 얘기다.
파일 내용 중에 깨진 문자가 들어 있는 경우에, 파일 인코딩이 잘못 검출이 되는 경우가 있다.
(본인은 mysql dump data를 vim으로 열어보다가 이와 같은 경우를 당한 적이 있다.)

이런 경우의 대처법은 이렇다.

예를 들어, 사실은 utf-8 인코딩이 맞는데 깨진 문자 때문에 latin1 인코딩으로 검출(fenc=latin1)되었다고 하자.
이 상태에서 강제로 utf-8으로 바로잡아준답시고 아래와 같이 하면..
:set fenc=utf-8
현재 문서를 cp949에서 utf-8으로 변환(convert)을 해 버린다.
즉, 사실은 utf-8 문서인데..  이 문서에다가 cp949에서 utf-8으로 변환하는 로직을 돌려버린다는 것이다.

따라서 원하지 않게 문서가 수정된 상태가 되고, 만약 이 상태로 문서를 편집하거나 저장하면 완전히 맛이 가는 상황이 되는 것이다.

그렇다면 어떻게 하느냐?
vim의 ++opt argument를 사용하면 된다.  즉, 위와 같은 상황에서는 아래와 같이 하면..
:e ++enc=utf-8
현재 파일을 fileencoding=utf-8 상태로 강제설정하여 다시 읽어들인다.
문서는 수정되지 않은 상태로 보이며, utf-8 문자들은 정상적으로 보이게 된다.
이 상태에서 문서를 편집하면 되는 것이다.


오늘도 빨래 끝~ +_+


+ Recent posts