개요
Unix / Linux 환경에서 vi editor 텍스트 밀림 현상은 OS 언어 설정이 한글인 환경에서 자주 발생합니다. SSH 클라이언트의 인코딩 설정과 서버의 LANG 환경변수가 불일치할 때 vi로 파일을 편집하면 한글이 깨지거나 입력한 텍스트가 밀려서 표시됩니다. 이 글에서는 원인 분석과 해결 방법, 재발 방지 설정을 정리합니다.
증상
vi editor 실행 중 아래와 같은 현상이 나타납니다.
- 한글 입력 시 글자가 밀려서 표시되거나 커서 위치가 어긋남
- 화면이 깨져 기존 내용이 뭉개져 보임
- 특정 계정에서만 발생하고 다른 계정에서는 정상 동작
- 스크립트 파일 편집 시 들여쓰기가 흐트러짐
원인
주요 원인은 SSH 터미널의 인코딩 설정과 서버 LANG 환경변수의 불일치입니다. OS를 한글로 설치하면 LANG=ko_KR.UTF-8로 설정되는데, SSH 클라이언트(PuTTY, MobaXterm, SecureCRT 등)의 문자 집합이 UTF-8이 아닌 경우 vi가 멀티바이트 문자를 잘못 처리하여 텍스트 밀림이 발생합니다. 간헐적으로는 홈 디렉토리의 환경설정 파일(.bashrc, .bash_profile)이 누락된 경우에도 동일한 현상이 발생할 수 있습니다.
# 현재 서버 로케일 확인 $ locale LANG=ko_KR.UTF-8 LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_ALL=
해결 방법 1 — SSH 터미널 인코딩 설정 변경
SSH 클라이언트의 Character encoding(문자 집합) 설정을 서버 LANG과 일치하도록 변경합니다. 현재 설정이 Default이면 UTF-8로, UTF-8이면 Default로 변경하여 재연결합니다.
- PuTTY: Configuration → Window → Translation → Remote character set
- MobaXterm: Settings → Terminal → Default character set
- SecureCRT: Session Options → Terminal → Emulation → Character Encoding
설정 변경 후 SSH 세션을 재연결하여 vi를 실행하면 대부분의 경우 정상 동작합니다.
해결 방법 2 — TERM 환경변수 설정
터미널 인코딩 변경 후에도 화면이 깨지는 현상이 남아 있다면 TERM 환경변수를 vt100으로 변경한 뒤 vi를 실행합니다.
# 현재 세션에만 적용 (임시) $ export TERM=vt100 $ vi <파일명> # 영구 적용 — .bashrc 또는 .bash_profile에 추가 $ echo 'export TERM=vt100' >> ~/.bashrc $ source ~/.bashrc
재발 방지 — .vimrc 인코딩 설정
사전에 ~/.vimrc에 인코딩을 명시해 두면 SSH 클라이언트 설정과 무관하게 vi가 항상 UTF-8로 동작하므로 vi editor 텍스트 밀림 현상을 예방할 수 있습니다.
" ~/.vimrc set encoding=utf-8 set fileencodings=utf-8,euc-kr,cp949 set termencoding=utf-8
파일이 없는 경우 vi ~/.vimrc로 새로 생성합니다. 저장 후 vi를 재실행하면 설정이 적용됩니다.
참고
관련 포스트: