HOME TIP & TECH

TIP & TECH

TIP & TECH 상세
cygwin의 terminal에서 UTF-8을 사용하기

onionmixer 2012-01-25 21:38:06 9629

http://chanik.egloos.com/3785205

원문은 이거입니다.
자료보존차원에서 남겨둡니다.

=====================================================================

MinTTY : Cygwin에서 UTF-8 지원하는 터미널

[1] MinTTY : Cygwin에서 UTF-8 지원하는 터미널

새로운 Cygwin 1.7 rxvt 한글 문제 해결 alpha


위 글은 cygwin에서 rxvt를 쓰고 euc-kr 문자셋을 쓰기 위한 꼼수를 다룬 것이었다.
그런데, 알고보니 cygwin에서 rxvt 대신 쓸 수 있는 mintty라는 터미널 프로그램이 있었다
mintty는 UTF-8도 지원한다.

요즘 cygwin을 설치하면 "Cygwin Terminal" 바로가기가 만들어지는데,
바로가기는 아래의 같이 mintty를 실행하는 명령을 담고 있다.

        C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -

나는 이 바로가기를 무시하고 오래전부터 쓰던 배치파일(rxvt를 실행하는 배치파일)을 이용해서
cygwin을 써 왔기 때문에 이런 프로그램이 있는 것을 모르고 있었다.

어쨌든, mintty를 통해 UTF-8을 쓰기 위해 아래와 같이 약간의 설정변경이 필요했다.

(1-1) LANG=C.UTF-8

.bashrc 등에 있는 LANG 설정을 eucKR에서 UTF-8로 바꿔준다.

        export LANG=C.eucKR ==> export LANG=C.UTF-8

(1-2) .vimrc 문자셋 설정 (fileencodings, encoding)

Re: Unicode/UTF-8 support (MinTTY) - ncursesw - Mutt, Vim
    http://cygwin.com/ml/cygwin/2010-06/msg00196.html

cygwin의 vim은 이미 UTF-8 지원에 문제가 없는 상태인데
다만 .vimrc 에서 termencoding 변수가 엉뚱하게 강제설정되어 있으면 오동작하니 조심해야 한다.

내 컴에는, 오랫동안 euc-kr로 고정해서 쓰다보니 .vimrc에 아래의 두 줄이 강제설정되어 있었는데,
이 부분을 제거하지 않으면 vim에서 UTF-8 파일을 편집할 때
한글이 보이기는 하지만 줄의 끝부분이 깨지는 현상이 있었다.

set fileencodings=euc-kr
set encoding=cp949

(1-3) 덤으로, 폰트 설정

mintty 기본폰트는 Lucida Console인데 한글이 바탕체(?)로 나와 보기에 편치 않다.
터미널에 마우스 오른쪽 버튼 클릭하면 나오는 Options 메뉴에서 설정을 바꿀 수 있다.
나는 Fixedsys로 설정해서 쓰니 보기 편했다.

설정은 ~/.minttyrc 파일에 저장되므로, GUI 안 쓰고 그냥 아래 한 줄짜리 .minttyrc 파일을 만들어도 된다.

      Font=Fixedsys



[2] 여러가지 터미널을 혼용


Cygwin 사용을 위해 프롬프트를 띄우려면 결국에는 bash가 실행된다.
cygwin의 bash는 Windows 기본 shell인 cmd에서 실행될 수도 있고,
rxvt에서 실행될 수도 있고, 이번에 새로 알게 된 mintty에서 실행될 수도 있다.

이 중에서 UTF-8을 지원하는 것은 mintty 뿐인 모양이다.
mintty를 쓸 때는 utf-8을 쓰도록 설정하고 rxvt나 cmd를 쓸 때는 euc-kr을 쓰도록 설정하면
이런 여러 실행방식을 혼용할 수 있을 것이다.

결국 실행중인 터미널 환경을 구분하여 조건화된 설정을 해야 한다.
대충 정리해보니 각 환경별로 아래와 같이 환경변수 구분이 가능했다.

    - bash over rxvt     : TERM == xterm && COLERTERM == rxvt-xpm
    - bash over mintty : TERM == xterm
    - bash over cmd   : TERM == cygwin

이 구분법을 이용해 아래와 같이 .bashrc 및 .vimrc를 설정해 보니 그럭저럭 환경별 대응이 가능한 것 같았다.
뭔가 잘못이 있을지도 모르니까 문제 생기면 알아서 고쳐 써야 한다..


(1-1) LANG=C.UTF-8

bash 실행환경이 cmd, rxvt, mintty 가운데 어떤 것인지 구분하여 LANG 설정을 하기 위해
.bashrc 등에 있는 LANG 설정을 아래와 같이 해 두었다.


# rxvt    : TERM == xterm && COLERTERM == rxvt-xpm
# mintty  : TERM == xterm
# cmd     : TERM == cygwin
if [[ "${COLORTERM}" == "rxvt-xpm" || "${TERM}" == "cygwin" ]]; then
  #export LANG=ko_KR
  #export LANG=ko_KR.eucKR
  export LANG=C.eucKR
fi


(1-2) .vimrc 문자셋 설정 (fileencodings, encoding)

.vimrc의 문자셋 설정부분을 아래와 같이 해 두면
파일 인코딩이 utf-8 이든 euc-kr 이든 모두 깨지지 않고 처리 가능했고,
터미널 환경도 utf-8이 되든 euc-kr 이 되든 잘 되었다.

fileencoding 설정은 vim에서 파일을 읽어들일때 순서대로 시도해볼 문자셋/인코딩 방식을 나열하는 것 같고
encoding 설정은 터미널에서 사용하는 문자셋/인코딩 방식을 적는 것 같다.

엉성해 보이지만 대충 잘 돌아가는 것 같다.

" bash over rxvt   : TERM == xterm && COLERTERM == rxvt-xpm
" bash over mintty  : TERM == xterm
" bash over cmd     : TERM == cygwin

" bash over (rxvt OR mintty)
if $TERM == "xterm"
  set background=dark
  if $COLORTERM != "rxvt-xpm"
    set fileencodings=ucs-bom,utf-8,euc-kr
    set encoding=utf-8
  endif
endif

" bash over rxvt
if $COLORTERM == "rxvt-xpm"
  set fileencodings=ucs-bom,utf-8,euc-kr
  set encoding=cp949
endif

" bash over cmd
if $TERM == "cygwin"
  set fileencodings=ucs-bom,utf-8,euc-kr
  set encoding=cp949
endif


-----새벽녘의 흡혈양파-----

댓글 2개

  • 2012-01-26 15:14:03

    뭔 말인지는 모르지만, 항상 새글이 있음을 감사하게 생각합니다..ㅋㅋㅋㅋ ^^;

  • 2012-01-27 16:31:05

    그냥 메몬데요뭐 ㅋㄷㅋㄷ

이전글/다음글 목록
이전 mac os x에서 dmg파일을 iso파일로 변환하기
다음 tadpole의 sparc노트북에 solaris설치할때 몇가지 tip