nerdtree euc-kr 환경에서 utf8 환경인 것처럼 사용하기 위한 꼼수
항상 vim + nerdtree 를 조합해서 작업하고 있고 nerdtree없이 작업하는것은 매우 끔찍한 시간이 될거 같다. 그런데 최근 새로 일하게 된 곳의 서버는 euc-kr 로 설정이 된 상태이다 (LC_CTYPE=ko_KR.eucKR). 그리고 계정은 1개뿐이라서, 개발자 별 로 설정을 달리 할수도 없는 상황이다.
이 환경에서는 nerdtree 플러그인이 제대로 동작하지 않는다 (utf8 에서 정상동작)
1. 자신의 터미널 세션만 변경하고 ~/.vimrc 를 수정하는 방법
열려 있는 터미널에서만 환경변수를 다음을 실행하여 변경하고,
export LANG=ko_KR.utf8
export LC_CTYPE=ko_KR.utf8
~/.vimrc
에 다음처럼 설정해 주고,
set encoding=utf-8
이런 식으로 하면 ~/.vim
에 nerdtree 설치해서 나는 사용할 수는 있으나, 이것은 vi 사용자 모두에게 영향을 주고, 다른 사용자로 부터 욕을 먹는 경우가 발생한다.
nerdtree 관련된 플러그인 파일들이 존재하면 vim 를 실행하는 시점부터 타 사용자들은 nerdtree 플러그인 로딩 실패 관련된 에러가 발생하기 때문이다.
2. vim 기동시 나만의 설정을 가지고 동작되게 한다
그래서 방법을 찾다가 다음처럼 사용 중인데 나름 괜찮은 듯하다.
vim 기동시 -u
옵션을 주면 임의 위치의 vim 설정 파일을 지정 할수 있다.
즉 기본값 ~/.vimrc
말고 다른 설정 파일을 지정할수 있다.
또한 임의 지정한 vim 설정 파일에서 임의 위치의 .vim 디렉토리 위치를 지정할수 있다.
즉 ~/.vim
디렉토리 대신 임의 위치를 지정 가능하다.
자 그럼, -u
옵션을 사용하기 위해, 임의 위치에 설정파일을 하나 만든다. 예를 들어서 custom_vimrc 이름으로 ~/users/kojh/
디렉토리에 파일을 생성하고, 내용은 다음처럼 한다.
""" 자신이 사용중인 .vimrc 내용을 설정하면 된다.한가지 주의점은
""" set nocompatible 가 제일 먼저, 꼭 설정 되어야 함.
set nocompatible
"""let g:NERDTreeDirArrows=0
"""let NERDTreeDirArrowExpandable ='+'
"""let NERDTreeDirArrowCollapsible ='~'
let NERDTreeIgnore = ['\.pyc$','\.o$']
map :nt <ESC>:NERDTree<CR>
set sw=4
set sts=4
set ts=4
set autoindent
set expandtab
set smartindent
set ruler
set nu
set hls
set rulerformat=%70(%<%40.45f\ %m\ %r%=%l/%L,\ %cpp%V\ %4P%)
syntax on
colorscheme desert
set colorcolumn=80,130
""" 기타 등등 ......
set encoding=utf-8
set fileencodings=utf-8,euc-kr
""" 다음 부분이 핵심이다.
let &runtimepath='~/.vim_kojh,$VIMRUNTIME'
let $VIMHOME='~/.vim_kojh'
let &runtimepath … 이부분이 중요한데, 위에 설명한것처럼 euc-kr 환경에서는 ~/.vim
에 nerdtree를 설치 할수 없기때문에 ~/.vim_kojh
라는 임의 폴더를 생성해서 그 안에 nerdtree 플러그 인을 설치한다. 그리고 그 경로를 지정해 준것이다.
이런 작업을 통해서 기존의 .vimrc
, .vim
디렉토리와 완전 별개의 설정으로 vim 을 구동시킬수 있다.
자신의 터미널 에뮬 설정을 utf8로 설정하는것도 반드시 필요 (즉, putty 등 설정에서 encoding 부분)
한가지 문제점은 만약 vundle 과 같은 plug-in 매니저를 사용중인 경우에는
vundle 내부적으로 ~/.vim
위치를 하드코딩 한 듯하며, 이 때문에 문제가 발생한다.
이때는 그냥
~/users/kojh/custom_vimrc
에서 vundle 부분을 제거하고(–;)~/.vim_kojh/bundle/nerdtree
내의 모든 파일을~/.vim_kojh/
위치로 옮기면 된다.
(즉,~/.vim_kojh
위치에서 mv bundle/nerdtree/* . 실행).
vundle 과 같은 plug-in 매니저를 사용하는 방법은 불가능해보이지만.. 이건 아마 다른 방법이 있을지도 모르겠다.
set nocompatible 설정은 다른 방법도 있다. vim -N 옵션을 사용하면 된다.
이렇게 설정이 완료되면 vim 실행은 다음처럼 수행한다
-
먼저 해당 쉘의 환경변수를 재설정한다(현재 세션만 영향을 받게)
export LANG=ko_KR.utf8 export LC_CTYPE=ko_KR.utf8
-
그리고 vim -u ~/users/kojh/custom_vimrc 로 옵션을 주고 실행한다.
좀더 간단하게 한번에 하려면 alias 를 설정하면 된다.
alias kovim='. ~/users/kojh/myprofile;vim -u ~/users/kojh/custom_vimrc '
이경우 ~/users/kojh/myprofile 파일을 생성하고 그내용은 위의 export 2줄을 넣으면 된다.
utf-8 환경에서 그냥 cat 명령으로 euc-kr 문서를 보면 깨지므로 다음처럼 alias를 만들어서 사용해도 좋다.
alias cat-euc-utf8='iconv -f EUC-KR -t UTF8 '
좀 번잡스럽기는 하지만 이런식으로 euc-kr 환경에서 nerdtree를 utf8 환경에서 나만 독립적으로 사용할수 있다. 물론 제일 좋은 해결책은 서버 설정을 utf8 로 맞추는 것이다. 아마 소스코드를 윈도우에서 편집 하거나, DB 에 한글 저장한다고 이런 설정을 오래전부터 유지하고 있는 듯 한데, utf8로 한글 처리 안되는것 도 아니니 왠만하면 설정을 utf8 로 하는게 맞다고 본다.. 아무튼 시대에 뒤떨어진 설정을 가진 서버들도 있으니 이런 방법이 유용할 경우도 있겠다.