Vim을 쓰는 이유, Emacs를 쓰는 이유

지금까지 Vim VS Emacs 류의 이야기는 많았지만 그 둘 다를 사용하는 사람도 없지는 않겠지. 나도 상황에 따라 두 가지를 다 쓰지만 사용률로 보면 Vim이 압도적으로 높긴 하다.

왜 이런 툴을 쓰는 걸까. 편하니깐. 하지만 윈도우에서만 코딩했던 대부분의 사람들은 이 말의 의미를 전혀 이해하질 못 한다. 그러니 아무도 보려 하지 않는 이상한 글을 또 하나 써 보자.

Vim - Vi Improved

vim이든 전신인 vi이든 간에 역사 같은것 따윈 버려. 알고 싶으면 찾아봐.

안써본 사람들이 처음 써 보며 하는 말은 '이게 뭐야' 일 것이다. 뭐 요즘의 GVim 등은 윈도우의 창 종료 버튼으로 종료시킬 수 있는 방법은 다들 아니깐 나아진 상황이겠지만, 옛날 콘솔 환경에서는 종료 방법 조차 몰라서 동동거리던 사람을 제법 봤거든. 그러고는 다시는 쳐다보지 않지. 익숙해지면 이렇게 편한 환경에 대해 별로 관심이 없겠지...

결론부터 이야기 해 보자. 손으로 코딩하기 편하다. IDE 등에서 자주 사용하던 copy-paste 방식의 코딩 보다는 새로운 코드를 작성하는데 더 유용하다. 오히려 마우스를 쓰기에 귀찮다고 할 정도로 타이핑에 최적화 된 편집 능력을 제공한다. 커서키나 키패드 등등의 기본키보드 위치를 벗어나는 위치의 키들은 쓸 일이 없다. 즉, f, j 근처에서 손이 움직일 수가 있다는 의미. ESC키를 자주 쓰지만 크게 무리가 가는 위치도 아니다.

Vim자체는 가볍기도 하고 확장 능력도 우수한 편이다. 자체 문법을 가진 스크립트를 사용할 수도 있고 단축키를 맘껏 바꾸는 것도 어느 정도는 자유롭다.

Vim 위키에서 찾아보면 유용한 스크립트나 코드들을 구할 수도 있다. 예를 들어, 내가 자주 사용하는 'C++ 헤더의 프로토타입을 읽어서 C++소스코드 상에 기본 Implementation Prototype을 자동으로 코딩해 주는 기능' 등...

Vim은 아주 유용한 Text Editor 이자 Code Editor이다. 비교해서 정리해 보자.
  • 커서 이동을 h/j/k/l로 한다. 굳이 커서키로 옮기지 않아도 된다: 마우스로 콕 찍는다고 한다면 타이핑 할 때 손을 마우스에서 다시 키보드로 가져와야 되잖아...
  • 워드단위 이동을 w/b 등으로 할 수 있다: Ctrl+커서키로 이동하는 것에 비하면 당연히 편하지. 아니면 마우스로 콕? 마우스 이야기는 굳이 안해야지 -_-
  • 액션(?)키의 조합. 예를 들어 dw 같은 워드 삭제: Shift+Ctrl+커서로 선택해서 Delete하는 수고? 아니면 마우스 더블클릭 후 Delete?
  • '/'로 펼쳐지는 단순 검색. n, p로 펼쳐지는 이전, 다음 검색: Ctrl-f [검색어] Enter, F3, Shift-F3... 어떤게 편해보여?
  • 페이지 이동(Ctrl-F 등): 검색이 아니라 PageDown과 동일해. 단지 PageDown키로 손을 옮기지 않아도 되지.
아니 뭐 적자면 수 없이 많겠지만 약간만 예를 들어 저 정도거든. 사람마다 틀리긴 하겠지만 뭐 내가 봐선 비교가 안된다고 봐.

불행히도 visual-block이라는, 윈도우 사용자 입장에선 copy-paste로 이어지는 일련의 동작이 좀 달라서 헷갈릴 때가 많다. 붙는 위치가 커서 위치냐 커서 다음 문자의 위치냐 하는게 너무 헷갈리지. (메모장 등에선 커서 위치에 삽입이 되어버리니깐)

IDE로써의 이야기는 ctags와 taglist, A, 기타 등등 수 많은 외부 프로그램이나 스크립트 쪽을 찾아봐. 귀찮아. =ㅅ=

Emacs

RMS에 의해 어쩌구 저쩌구 생략. 그걸 따질 필요는 없다. 알고 싶으면 직접 찾아보면 된다.

Emacs는 편집기가 아니다. ELisp을 기반으로 한 플랫폼이다. 그냥 여기다 편집기 기능을 하는 코드를 붙여놓고 다른 유용한 코드도 넣어서 함께 배포하는게 지금의 Emacs일 뿐이다. 그래서 편집기 전쟁에서도 항상 등장하는 녀석이다.

그 확장 능력을 생각해보면 Vim과는 차원이 다르다. Emacs를 하나의 데스크탑 처럼 쓰는 이들도 있을 정도로 못 하는게 거의 없다.

편집기로써의 편리함을 따져보자면 Vim에 비해서 별로라고 생각해. 전통적으로 이어온 Ctrl/Meta를 너무 많이 쓰는 키맵 특성 상 제법 손에 무리가 가는 사람도 있을 터. 사람마다 틀리겠지만 개인적인 평가에선 Emacs의 기본 편집 방법은 고통이라고 평가하고 싶다.

하지만 이런 문제는 viper-mode를 만나는 순간 뒤짚힐지도 모르지. 거기다 무한확장이라는 의미로 자신만의 기능을 만들어 쓰는 건 Emacs 사용자 입장에선 당연한 이야기이다. 불편함을 편리함으로 만드는 것, 그것이 빠지면 Emacs를 쓰지 말라고 이야기 하고 싶을 정도.

왠지 Emacs를 편애하는 것 같지만 사실 Vim을 더 많이 사용한다.

Emacs는 플랫폼이라는 구조 상 매우 덩치가 크고 그래서 느리다. ELISP를 기반으로 한다는 건 모든 환경이 ELISP로 코딩되어 있다는 것이고 심지어 설정 파일 조차도 일종의 프로그램이다. 괄호를 많이 쓰는 함수형 언어인 LISP는 매우 생소한 문법체계 때문에 외면을 당하기도 하고...

그래서 전문적으로 큰 프로젝트에서 코딩을 해야 할 때 라던가가 아니면 잘 안쓰게 된다.

현실은 CEDET랑 ECB가 제대로 빌드가 안되고 있어서 짜증을 내며 잘 안쓰고 있기도 하다. 예전에는 잘 굴러가더니 왜 이럴까.

확실한 건 IDE(통합개발환경)의 면으로 볼 때 Vim은 Emacs에 상대가 안되겠지. 하지만 Vim의 편함은 Emacs를 멀리하고 싶을 때도 있게 만들어.

Emacs도 Vim과 비슷하게 키보드에 손을 놓는 기본위치에서 크게 벗어나지 않는 키맵이지만 손이 좀 아파. c-f/b/n/p로 커서 이동이 가능하고 c-v/m-v로 페이지 이동도 가능하고 m-d로 워드 삭제도 되. 하지만 항상 Ctrl 혹은 Meta를 같이 눌러야 한다는게 나에겐 곤혹이란 말이지... 다만 viper-mode를 기동할 경우 vi랑 거의 동일하게 이용이 가능해 진다는 점을 기억하자.

Emacs의 '고통의 손' 문제는 다르게 편리함으로 바뀌는 게 바로 확장성이다. 복잡하게 처리해야 될 액션(?)을 코딩해 놓고 그걸 간단히 키에 붙여보자. 과연 어떤 편리함이 생길까.

Eclipse

갑자기 튀어나온 이클립스라는 녀석은 이 주제와는 멀 지도 모른다. 하지만 간과한 것이 하나 있으니, Eclipse에는 Emacs 키맵을 지원한다. 상당수의 기능들이 Emacs 기본 키맵과 절묘하게 이뤄져서 Emacs에 익숙한 사람은 제법 편하게 사용할 수도 있다.

비슷하게 VC2005 부터도 Emacs 키맵이 들어있다. MS에 Emacs 광신도도 제법 있다고 하는 것을 반증하고 있지. 하지만 Eclipse 만큼의 환경을 제공해 주지는 못 하고 있고 그냥 키맵만 비슷하게 제공하는 수준에서 끝나고 있다. 그 외에 visvim 처럼 VC에 GVim을 임베딩 할 수도 있지만 뭐랄까... 뭔가 다른 것 같아...;;

그래봤자 Eclipse는 나에겐 떨거지 중의 대안일 뿐이다. 이렇게 덩치 크고 무겁고 GUI투성이인건 왠지 Editor로써의 겸손함이 없단 말이지. 편한건 편하지만 편집기 영역을 벗어나는 순간 Emacs 키맵은 존재하지 않거든.

사족

이렇게 찬양을 한다고 해서 요즘 처럼 마우스를 아주 자주 이용해서 코딩하는 사람들이 멍청하다거나 그런 이야기를 하는 건 아니야. 상황에 따라 특히 copy and paste 같은 작업은 마우스를 활용하는게 더 편한 것도 사실이야.

하지만 無 에서 有 를 창조하는 코딩을 할 때는 '키보드의 기본 위치에서 벗어나지 않는 입력 방법' 하나만으로도 이런 특이한(?) 편집기가 왜 그렇게 유명한가를 알 수 있지.

음... 뭐 나만의 세계, 아니 이 세계의 사람들에 국한된 이야기일 지도...

덧글

  • ㅇㅅㅇ 2012/02/10 14:33 # 삭제 답글

    ESC키 대신 "ctrl+["를 씁니다. 왼손 소지 + 오른손 약지. Backspace도 x나 X, 입력모드 상태에선 ctrl+w로 삭제를 하니 손이 거의 움직이지 않으면서 에디팅이 가능하죠. 한손타자용 "ctrl+c"도 있습니다~
  • Sevensoul 2012/06/13 20:57 # 삭제 답글

    제미있게 읽고 갑니다 ^^
  • 웜퍼스 2012/07/14 18:09 # 삭제 답글

    이멕스 고통의손 문제는.. Ctrl키를 Caps Lock키랑 바꾸거나 Win키랑 바꾸면 해결될거 같습니다. vi, vim, nano, Scite, 등등 다 써봤는데 대체 이멕스 놔두고 왜 그런것들 쓰는지 이해가 안갑니다. (eclipse는 살짝 이해가 가긴 합니다. 사기적인 기능들이 좀 있더군요..)
  • ^^^ 2013/10/25 12:23 # 삭제 답글

    사실, 본인의 경우는 약간 반대의 생각을 갖고 있습니다.
    키보드 / command 등을 사용하는 것이 더 빠른 editing을 할 수 있다고 생각했던적도 있지만 실제 많은 부분에서 그리 효율적으로 느껴지지 않네요.
    특정한 패턴의 작업을 계속하는 사람이라면 vim 같은류의 편집기가 훨씬 편하게 느껴지겠지만 다양한 작업/새로운 작업을 계속하는 사람의 경우는 그렇지 않습니다. 쉽다는 것이 저 수준이라는 것은 말이 안됩니다.
    이클립스의 경우 그 다양한 기능과 확장성은 대단하죠.
    그리고 C 를 코딩하시는 분이라면 source insight 을 사용하는 것이 아마 vim 보다 훨씬 나을 것입니다.

    command 를 typing 하는 것보다 마우스 클릭 한번이 훨씬 빠르네요 ^^
  • brumari 2015/03/13 22:49 # 삭제 답글

    가장 최근덧글 이후로 1년이 넘은 시점에 vim이라는 에디터를 접해봤습니다.
    아마 앞서 덧글쓰신분들이랑 포스팅하신분은 상당한 수준의 c 프로그래머로 보이는데요.
    javascript를 사용하는 저레벨 개발자의 시점으로 볼때 vim과 비교해서 eclips의 강점에 대한 의견을 내자면 대규모 프로젝트에서의 빠른 코드수정이라고 볼 수 있을거 같습니다.
    규모가 크고 기간이 짧은 프로젝트의 경우 같은 구문이 여러번 반복되는건 어쩔수 없는 일 같습니다.
    이럴경우 검색과 통합편집은 eclips의 기능에 더 적합한거 같습니다.
    가벼운 에디터로는 acroediter라는 공개에디터와 editplus라는 상용에디터가 같은 이유로 인기가 좋은걸로 보입니다.
  • brumari 2015/03/13 22:49 # 삭제 답글

    가장 최근덧글 이후로 1년이 넘은 시점에 vim이라는 에디터를 접해봤습니다.
    아마 앞서 덧글쓰신분들이랑 포스팅하신분은 상당한 수준의 c 프로그래머로 보이는데요.
    javascript를 사용하는 저레벨 개발자의 시점으로 볼때 vim과 비교해서 eclips의 강점에 대한 의견을 내자면 대규모 프로젝트에서의 빠른 코드수정이라고 볼 수 있을거 같습니다.
    규모가 크고 기간이 짧은 프로젝트의 경우 같은 구문이 여러번 반복되는건 어쩔수 없는 일 같습니다.
    이럴경우 검색과 통합편집은 eclips의 기능에 더 적합한거 같습니다.
    가벼운 에디터로는 acroediter라는 공개에디터와 editplus라는 상용에디터가 같은 이유로 인기가 좋은걸로 보입니다.
  • 지나가는나그네 2017/02/17 18:46 # 삭제 답글

    글 잘 읽었습니다. vim빠 라서 왜 emacs 인가 궁금해서 읽어봤네요. 재밌었습니다.
  • vimmer 2017/07/23 23:12 # 삭제 답글

    vim의 가장 강점은 vim script이고 이것 덕분에 오랫동한 구축되어온 plugin 생태계가 있습니다. atom이나 sublime의 패키지도 이러한 장점을 흡수해서 점점 활발해지고 있지만, 터미널에서 돌아가는 vim의 태생을 이기지는 못할 겁니다.
댓글 입력 영역