emacs를 사용해야 하는 이유

Posted by 大山 Wed, 12 Jul 2006 16:55:00 GMT

혹시 내 주변 사람들은 내가 고집불통이며 모든 일을 새로운 방식으로만 처리하려 한다고 생각할지도 모르겠다. 하지만 꼭 그렇지만은 않다. 물론 나만의 방식을 고집할 때도 있겠지만 알고 보면 나도 은근히 남을 따라하는 것을 좋아하는 편이다. 내가 해야할 고민을 누군가가 대신 해주었다는 것은 대단히 매력적인 일이 아니겠는가? 나는 단지 누구를 따라할 것인지 선택하는 것에 까탈스러울 뿐이다.

5년쯤 전이었나 리눅스를 사용하다 보니까 쉘에서 돌아가는 텍스트 편집기를 익혀야 할 필요가 있었다. 처음에는 pico를 사용했지만 곧 vi와 emacs 사이에서 고민을 하게 되었다. 열심히 웹을 뒤지며 검색해본 결과는 실용주의자는 vi를 선호하고 해커들은 emacs를 선호한다는 것이었다.

프로그래밍에 관심이 많았던 나로서는 해커들을 따라갔을 수 밖에. 그래서 emacs를 선택했다. 하지만 나는 관념주의에 빠지는 것을 대단히 경계하는 사람이기도 하다. 그런 내가 지금까지 emacs를 계속해서 사용하고 있는 것은 emacs만이 가지고 있는 이점이 여럿 존재하기 때문이다. 여기서는 보다 실용적인 관점에서 emacs를 사용해야 하는 이유를 살펴보고자 한다.

이유 1. emacs 키 바인딩은 유니버설하다

emacs는 vi와 다르게 모드가 없다. 때문에 Ctrl 키와 Meta(Alt) 키를 사용해서 소스 코드를 쉽게 돌아다닐 수 있다. 그런데 이러한 emacs의 키 바인딩을 지원하는 것은 emacs만이 아니다. 유닉스 쉘, Readline 라이브러리, 리눅스와 맥 OS X의 모든 텍스트 입력창, 이클립스 등의 GUI 텍스트 편집기 등은 모두 emacs의 키 바인딩을 지원한다.

마우스를 사용하지 않고 100% 키보드로만 텍스트를 편집하는 것이 얼마나 효율적인지 경험해 보지 않은 사람은 알지 못한다. emacs 키 바인딩을 지원하지 않는 프로그램이라면 나는 아마 사용하지 못할 것 같다. (가끔 윈도우를 쓸때 울화통이 터지는 이유 중의 하나이다.)

어디서나 emacs 방식으로 텍스트 편집이 가능하기 때문에 가능하면 모든 편집 작업을 emacs에서 하게 되고 이는 작업 능률을 상당히 올려 준다. 개인적으로 코딩, 원격 서버 관리, 집필, 번역 등을 모두 emacs에서 하고 있다. (emacs에서 이메일을 보내고 채팅을 하는 등 미니 OS처럼 사용하는 시대는 나도 이제는 지나갔다고 생각한다.)

이유 2. emacs는 쉘 위주의 개발 환경을 유도한다

어떤 개발자들은 IDE 개발 환경을 선호한다. 자바와 같이 언어의 한계 때문에 IDE 사용이 불가피한 경우도 있기는 하다. 하지만 IDE를 사용하기 시작하는 순간 개발자는 워크플로우와 관련된 수많은 컨트롤을 잃어버리게 된다. GUI 애플리케이션 개발과 같이 특수한 경우에는 모르겠지만 그런 경우가 아니라면 쉘 기반의 개발 환경이 훨씬 더 유리하다. 모든 개발 프로젝트마다의 복잡한 워크플로우를 모두 지원할 수 있는 IDE는 없기 때문이다.

emacs를 쓰다 보면 자연스럽게 쉘과 친해지게 된다. 이는 emacs가 쉘에서도 구동될 수 있다는 점, emacs 내부에서 쉘을 실행할 수 있다는 점 때문에 편집을 하면서도 다양한 유닉스 유틸리티를 편리하게 이용할 수 있기 때문이다. 일정 부분은 심리적인 면도 작용하는데 이는 emacs의 전반적인 인터페이스가 쉘과 같은 CLI 환경이라 그런 것 같다.

쉘은 구닥다리 인터페이스라고 치부하던 MS 조차 윈도우 비스타에 모나드(Monad)란 이름의 쉘을 탑재하기로 한 것은 괜히 그러는 것이 아니다. 쉘은 개발자의 친구라는 사실을 잊지 말자.

이유 3. 무한대에 가까운 emacs의 기능

emacs에는 정말로 편리한 기능이 많다. 금상첨화로 이런 기능들이 마우스 한 번 까딱하지 않고 키보드에서 직접 사용할 수 있다. 명령어를 입력해서 실행시키는 방식을 쓰므로 자주 쓰는 기능이 아니라면 키 바인딩을 모두 기억해야 할 필요도 없다. 명령어 입력 조차도 탭 자동완성 기능이 있기 때문에 대강만 기억해두면 된다.

GUI 인터페이스로 이런 기능을 모두 구현한다면 아마 MS 워드보다 더 사용하기 힘들어질 것이다. emacs의 기능은 무한대에 가깝기 때문이다. 게다가 필요하면 언제든지 새로운 기능을 추가할 수 있다.

emacs의 단점

emacs가 장점만 있는 것은 아니다. 사실 왠만큼 기술적으로 자신이 있는 사람이 아니라면 emacs를 권하고 싶지 않다. emacs의 설계를 보면 해커만을 위해 만들어진 텍스트 편집기임이 분명하기 때문이다. 역으로 해커를 지향하는 사람이라면 꼭 emacs를 써보도록.

누군가 emacs의 내부 스크립팅 언어를 루비로 바꾸어 준다면 정말 가서 뽀뽀라도 해주고 싶을 것 같다. Lisp도 훌륭한 언어이긴 하지만 네임 스페이스가 없어서 Lisp 함수 이름을 외우는 것은 상당히 번거로운 일이다. 게다가 emacs는 Common Lisp이나 Scheme과 같은 표준 Lisp을 사용하는 것이 아니라 emacs만을 위한 elisp을 사용한다. emacs처럼 거대한 프로그램에서 내부 스크립팅 언어를 변경한다는 것은 쉬운 일이 아니겠지만 텍스트 편집기만을 위해서 새로운 언어를 익혀야 한다는 것 또한 상당한 부담이긴 하다.

결론

결론은 그래도 emacs를 쓰자이다. 개발자는 장기적인 안목을 가지고 자신의 연장을 관리할 줄 알아야 한다. emacs가 비록 처음에는 익히기 어려운 연장인 것은 사실이지만 전세계 최고의 해커들이 emacs를 사용해서 최고의 프로그램을 만들어오고 있다는 것 또한 분명한 사실이다. 해커를 지향한다면 짬을 내서 emacs를 배워 보자.

Posted in  | Tags ,  | 5 comments | no trackbacks

Comments

  1. 1.
    said 2 months later:

    python은 쓸수있는거 같던데요.


  2. 2.
    大山 said 2 months later:

    @냠: 아, 사실 emacs는 워낙 확장성이 좋기 때문에, 이미 루비나 다른 언어의 바인딩이 나와 있기는 합니다. 하지만 이들은 신택스만 해당 언어를 사용할 수 있는 것이고, 실제로는 emacs에서 정의된 각종 elisp 변수와 함수 이름을 알고 있어야만 사용할 수 있지요. 개인적으로는 그렇게 복잡하게 사용하는 것 보다는 그냥 elisp을 사용하게 되더라구요. :)

    하지만 lisp은 루비나 Perl 등에 비해 텍스트 처리에 적합한 언어도 아니고, 네임스페이스 문제라든가 등의 몇가지 이슈도 있어서 내부 스크립팅 언어를 루비로 대체한 에디터를 만드는 것이 어떠냐는 의견이 종종 뉴스그룹 등에서 나오고 있습니다. (사실은 제가 퍼뜨리고 다니고 있지요.. ㅋ)

    사실 emacs 스케일의 텍스트 편집기를 만드는 일이 보통 작업은 아닙니다만, 개인적으로는 언제 꼭 한번 도전해보고 싶은 프로젝트랍니다.. :)


  3. 3.
    mkseo said 2 months later:

    저 트랙백 보냈는데 홈페이지 우측 태그 구름에서 emacs눌러서 나오는 글 목록 보기에서는 1 trackback 이라고 나오는데 정작 이 글을 클릭해보면 trackback이 안보이네요..

    브라우저 캐시때문인가요? 음 좀 이상해요. 아무튼 엮인글이 http://mkseo.pe.kr/blog/?p=1617 에 올라왔습니다 ^^


  4. 4.
    마잇 said 4 months later:

    "내부 스크립팅 언어를 루비로 대체한 에디터를 만드는 것이 어떠냐는 의견이 종종 뉴스그룹 등에서 나오고 있습니다. (사실은 제가 퍼뜨리고 다니고 있지요.. ㅋ)"

    이걸 꼭 실현해주시면 정말 좋을 것 같습니다. 전 직업 개발자는 아니고 컴퓨터를 좋아하고 취미를 위해 루비를 배우게 되었는데요. 읽기도 너무 좋고 쓰기도 너무 좋습니다.

    전 vim을 오랫동안 써 왔고 루비 코딩도 vim으로 만족스럽게 하고 있습니다. vim도 루비 바인딩을 지원하고 있기는 하지만 댓글중에 언급하신 그런 이유로 저도 루비로 쓰여진 에디터가 있으면 하는 생각을 점점 자주하고 있네요. 루비로 쓰다가 vim 스크립트 파일 같은 것 보면 아주 난감하거든요. 손대기가 싫습니다. 이 심정 이해하시리라 생각되네요 :)

    전 emacs는 안쓰지만 readline을 통해서 그 키바인딩을 익히고 역시나 아주 좋아합니다. readline이 구석구석 안쓰이는데가 없죠? 매우 잘 만들어진 인터페이스라는 생각을 합니다.

    그다지 많은 종류를 쓴다고는 할 수 없지만 vim 입력모드에서도 몇몇 키를 이맥스 스타일로 지정해서 쓰곤 합니다. GUI 위젯에서도 이 키바인딩을 지원했으면 하는 소망도 있고요.

    공감가는 부분이 많아 주절거리고 갑니다. 블로그의 다른 글들 특히 루비 관련 글들 잘 읽고 갑니다.


  5. 5.
    大山 said 4 months later:

    @마잇: 답글 감사합니다. 아직은 관련 라이브러리만 조금씩 들여다보는 단계입니다만, 언제 꼭 시작해 보도록 하지요~

    readline에서 혹시 ~/.inputrc 파일도 사용하고 계신지요? 아니라면, 이 파일에 "C-p: history-search-backward"와 "C-n: history-search-forward" 두 줄을 넣어보세요. 제가 가장 애용하는 기능이랍니다. :)


Trackbacks

Use the following link to trackback from your own site:
http://beyond.daesan.com/articles/trackback/93

Comments are disabled