Emacs와 Vim
프로그래머 중에는 자기가 사용하는 에디터가 최고라 주장하는 사람들이 꽤 있다. 배우기 어려운 에디터일수록 그런 경향이 큰 것 같다. 막강한 기능을 자랑하지만 배우기 힘든 에디터의 대표를 꼽는다면 단연 Emacs와 Vim일 것이다.
Vim의 학습 곡선을 보면 처음에 거대한 장벽이 있다. Vim을 처음 접한 사람들 대부분은 이 장벽을 넘지 못해 Vim 사용을 포기한다. 처음에 쉬운 듯 하다가 미궁에 빠지는 Emacs의 학습 곡선 또한 재미있다. Emacs는 자판에서 두드리는 글자가 그대로 에디터에 표시되므로 Vim보다 시작은 쉽다. 그러나 복잡한 키 바인딩에 익숙해지려면 시간이 좀 걸릴 것이다.
두 에디터 학습곡선은 웃자고 과장해 그린 것이지 실제로 그림 같지는 않다. Vim은 편집모드와 명령모드란 장벽을 넘으면 한동안 평탄해지지만 난해하기로 악명 높은 VimScript를 익히려 한다면 훨씬 더 높고 가파른 절벽이 나올 것이다. 그에 비해 Elisp은 직관적이다. Lisp을 싫어하는 사람은 Elisp도 좋아하지 않겠지만.
Emacs와 Vim은 확장성이 뛰어나다. Emacs는 에디터 설정이나 확장 기능을 작성할 때 Elisp을 사용하는데, Lisp을 좋아하는 사람은 그리 많지 않을 것이다. 그러나 VimScript를 보면 Elisp이 낫다고 생각할지도 모르겠다. VimScript는 암호 그 자체다. 요즘에는 Sublime Text나 Atom 같은 확장성이 뛰어난 현대적 에디터가 나오기도 했다. Sublime Text는 Python, Atom은 JavaScript와 같은 보다 친숙한 언어를 사용해 확장 기능을 작성할 수 있다.
예전에 Emacs를 사용하던 동료가 있었다. 그때까지 주변에서 Emacs를 사용하는 사람을 거의 보지 못했기 때문에 동료가 Emacs를 사용하는 모습을 보니 무척 반가웠다. 그 친구도 Emacs가 최고라고 하며 매우 빠른 속도로 키보드를 계속 두드렸다. 화면이 번적번적 하고 에디터 창이 나뉘었다 합쳐졌다 하기도 하고 뭔가 소스 코드도 조금 고친 것 같기도 했다. 그런데 자세히 살펴보니 화려한 동작으로 쓸데 없는 쇼만 할 뿐 코드는 거의 바뀌지 않고 있었다. 그걸 보고는 "이게 뭐야? 그렇게 열심히 타이핑을 하는데 코드는 안 변하잖아?", "백스페이스만 500타야..." 하며 놀렸던 기억이 난다.
나는 입력 속도가 빠른 편은 아니다. 오히려 천천히 또박또박 입력하는 편이다. 입력 속도가 병목이 되는 경우는 거의 없었다. 천천히 정확하게 입력하는 게 빨리 입력하려다 오타를 많이 내는 것보다 낫다고 생각한다. 어쩌면 이런 성향이 Vim보다 Emacs에 잘 맞았기 때문에 내가 Emacs를 좋아하며 쓸 수 있는게 아닐까 한다.
아무튼 Emacs든 Vim이든 기본은 익혀둘 가치가 있다고 생각한다. 트위터나 쥐메일, 스택오버플로우에서 j
, k
로 이전 글, 다음 글로 이동할 수 있는 것이나, bash에서 Ctrl+p
, Ctrl+n
을 누르면 이전에 입력했던 명령 히스토리 사이를 왔다갔다 할 수 있는 것, Ctrl+a
, Ctrl+e
로 입력한 명령의 맨 앞 또는 맨 뒤로 이동할 수 있는 것, IntelliJ IDEA에서 자동완성 팝업이 떴을 때 Ctrl+p
, Ctrl+n
으로 항목 사이를 왔다갔다 할 수 있는 것은 모두 위대한 두 에디터에 경의를 표현한 것이라 할 수 있다. Emacs나 Vim을 모르는 사람에게는 모두 의미없는 기능이겠지만, 아는 사람이라면 '이런 것도 되네' 하며 미소지을 수 있을 것이다.
Emacs와 마찬가지로 Vim을 사용해 개발하는 사람도 내 주변에는 거의 보이지 않는다. 요즘은 GUI 환경을 기반으로 한 배우기 쉬운 에디터가 많이 나와 있어 굳이 Emacs나 Vim을 배울 필요는 없을 지도 모르겠다. 특히 Java로 개발할 때는 Eclipse나 IntelliJ IDEA 같은 IDE를 쓰는 것이 훨씬 편하기도 하다. 그러나 익숙해졌을 때의 생산성이나 확장성이 Emacs나 Vim을 능가하는 에디터는 아직 보지 못했다.
Emacs교 신도로서 주위 개발자에게 Emacs를 전파하려고 열심히 꼬셨지만, 지금까지 넘어온 사람은 한 명도 없다.