선망의 에디터, 이맥스(Emacs) 시작하기

김대현
HappyProgrammer
Published in
8 min readDec 14, 2015

21세기인 요즘도 Vim이나 Emacs를 쓰는 사람이 많습니다. Emacs는 1976년에 공개됐고, Vim의 원조인 Vi도 1976년에 공개됐다고 합니다. Emacs와 Vi를 놓고 보면, 둘 다 마흔 살쯤 된 에디터군요. 세상에나! 소프트웨어 중에 40년 가까이 쓰이고 있는 게 몇이나 될까요?

대체 무슨 매력이 있기에, 아재의 아재들이 쓰던 에디터들을 아직도 쓰고 있는 건지 궁금해집니다. Emacs를 쓰는 사람이나 Vim을 쓰는 사람이나 모두 각 에디터가 궁극의 에디터로 여기는 것 같습니다. 뭔지 몰라도 매력적인 뭔가가 있기에 아직 그 오래된 소프트웨어가 발전하며 쓰이고 있는 것이겠지요. 심지어, 아마도 키보드가 쓰이는 한, 앞으로도 계속 쓰일 것 같습니다.

개인적으로는, 이 시대에 맞는 21세기의 텍스트 에디터를 쓰면 된다고 생각합니다. Sublime Text나, Atom 등의 훌륭한 현대 텍스트 에디터도 많고, 더구나 프로그래밍 작업에는 IntelliJEclipse 같은 통합개발환경(IDE)을 쓰는 것이 더 간편하겠지요. Sublime Text는 개인이 라이선스를 사서 그 라이선스로 회사에서 그 개인이 사용해도 되는 관대한 정책이기에, 맘 편히(?) 구매해서 쓰기 좋았습니다. 그리고, GitHub에서 공개한 Atom은 무료이니 더욱 부담 없이 쓸 수 있는 강력한 에디터이지요.

그럼에도 결국, 원격 리눅스 서버에 연결에서 텍스트 파일을 편집할 때는 그 터미널에서 Vim을 열어서 편집하곤 했습니다. 아주 기본적인 조작법밖에 몰라서, 독수리 타법으로 치듯 어리바리 편집하고 셸로 빠져나오곤 했지요. 즉, 로컬 머신에서는 서브라임 텍스트로 대부분의 편집을 하고, 서버 세팅이나 간단한 스크립트 파일을 편집할 때 Vim을 가끔 사용했던 것이지요.

Emacs / Vim는 심지어 프로세스 종료하는 법도 어렵더군요.

그런데 예전의 몇몇 동료들을 보면, 로컬에서나 리모트에서나 vi로 해커답게 화려한 손동작으로 멋진 기능을 활용하며 개발하더라구요. 뭔지 알아보지도 못하는데도 참 있어(!) 보였습니다.

있어 보인다는 점과 함께, 마우스나 터치패드 없이도, 키보드로 모든 작업을 할 수 있다는 점도 매력적입니다. 사실 프로그래머들이 쓰는 에디터라면 키보드로 거의 모든 작업을 할 수 있는 것이 기본이겠습니다만, 이 오래된 에디터들은 출발점부터가 마우스가 널리 쓰이기 전 시절이었던 데다, 마우스 없이 작업하길 좋아하는 해커들을 위한 에디터다 보니, 더 완벽하게(?) 키보드만으로 작업이 가능합니다.

집중해서 프로그래밍하는 플로우 상태에서 자꾸 손이 키보드에서 벗어나 포인팅 디바이스로 옮겨갔다 되돌아오는 일은 성가시기 때문에, 키보드에서 거의 모든 작업을 할 수 있다는 점은 꽤 매력적입니다. 두 어르신 에디터는, 두 손이 기본 포지션에서 벗어나지 않고 대부분 작업을 합니다. 심지어 커서키도 잘 쓰지 않죠. 커서키는 기본 위치에서 멀리 벗어나야 하잖아요?

암튼, 대학 때부터, Vi나 Emacs는 선망의 에디터로, 둘 중 하나는 잘 익혀서 써야하는 게 아닐까 하는 생각이 있어서, 때때로 시간을 들여 도전하곤 했습니다만, 아쉽게도 번번이 실패했습니다.

Lisp 도전과 함께, Emacs에 재도전

Emacs를 써보려다 줄곧 실패했으면서도, 다시 도전하게 됐습니다. 우연한 계기로, Lisp 계열의 프로그래밍 언어, Clojure를 배워보기로 마음먹었는데, 아무래도 Lisp 프로그래밍과 Emacs 에디터와는 찰떡궁합인 것 같아서요. (Emacs는 에디터 자체도 Lisp으로 만들어진 데다, 각종 설정이나 플러그인도 Emacs Lisp 코드로 작성합니다. 그래서일까요? Lisp을 개발하기에도 좋은 환경이 잘 갖춰져 있습니다.)

사실, 클로저(Clojure) 개발만이 목적이라면, CursiveLightTable을 쓰는 게 현명한 판단일 것 같습니다.

https://cursiveclojure.com

그럼에도 불구하고, 선망의 에디터 Emacs에 미련(!)이 남아, 클로저를 시작하는 이 기회를 핑계로 다시 시작해보기로 했습니다.

시작하는 입장에서 도움이 될 정보들

권하기는 어렵습니다만, 어떤 이유로든 새로이 Emacs에 도전하신다면, 아래의 내용이 도움될지도 모르겠습니다. 이맥스는 특히, 워낙 설정과 용례가 다양하고, 사용자의 개성에 따라 천차만별로 다르게 사용할 수 있다는 점이 장점이자 단점이기에, 절대적일 수는 없구요, 참고만 하시면 되겠습니다. 어디까지나 시작점(!)이겠습니다.

OS X에서 쓸 Emacs

제 작업 환경은 OS X인데요, OS X에서 쓸 Emacs를 고르는 것도 몇 가지 선택이 있습니다. 터미널에서만 쓸 거라면, homebrew로 설치하면 되고, GUI 애플리케이션으로 쓴다면, OS X 환경에 편리하게 커스터마이즈된 애플리케이션도 있지만, 써보니 개인적으로는 순수(?)한 Emacs를 OS X 애플리케이션으로 빌드한 Emacs For OS X가 좋은 것 같습니다.

http://emacsformacosx.com

기본 셋업에 Prelude

그리고, Emacs를 처음 쓰려면, 세팅할 것도 많고 선택할 것도 매우 많습니다. 일일이 초기 설정부터 하려면 너무 많은 일을 해야 하는데, 디폴트 값들이 쓰기 편리하게 설정된 패키지를 써서 시작하면 큰 도움이 됩니다. 이 역시 여러 가지가 있는데, 전 그중에 Prelude를 편리하게 쓰고 있습니다.

http://batsov.com/prelude/

Prelude 설치하면 함께 따라오는 helm도 추천 드립니다.

(require ‘prelude-helm-everywhere)

Emacs 서버 띄우기

기본 세팅을 좀 하고 나면, Emacs 프로세스를 띄우는 것이 느릴 수 있습니다. 주로 작업하는 파일들은 한 이맥스 프로세스에서 쓰면 되지만, 간혹, 터미널에서 바로 파일을 편집하려고 emacs를 열게 될 때가 있는데요, 매번 새로 띄우면 아무래도 좀 버겁습니다.

그럴 때 쓰라고, Emacs는 서버로 뜰 수 있고, 클라이언트 프로세스로 붙어서 이미 떠 있는 Emacs 프로세스에 붙어서 간편히 편집할 수 있습니다.

emacs --daemon

이렇게 데몬 프로세스로 띄워두거나, 아니면 이미 띄운 이맥스 프로세스에서,

(server-start)

위 elisp 문장을 실행해서 서버를 구동할 수 있습니다.

Emacs 클라이언트 사용하기

  • emacsclient -c
  • emacsclient -t

이맥스 서버가 구동된 다음에는, 두 옵션을 사용해 빠르게 파일을 열어 편집할 수 있습니다. [-c 옵션]은 GUI로 새 윈도(프레임)을 띄워서 편집하고, [-t 옵션]은 터미널에서 텍스트 모드로 바로 띄워서 편집하는 옵션입니다.

/Applications/Emacs.app/Contents/MacOS/bin/emacsclient

Emacs for OS X를 설치했다면, 위 디렉터리에 있는 emacsclient/usr/local/bin/같은 디렉터리에 심볼릭 링크를 연결하거나 해서, 실행하기 쉽게 해 두도록 합니다.

그걸 $EDITOR 등의 환경 변수에 바인딩해두면, 텍스트 에디터가 필요한 시점마다 잘 쓸 수 있습니다.

desktop-mode로 이전 세션 환경 복원하기

OSX 네이티브 애플리케이션들이 흔히 지원하는 기능인데, 이전에 앱이 종료됐을 때, 열었던 파일들이나 커서 위치등의 유용한 정보들을 저장하고 되살리는 기능입니다.

(desktop-mode 1)

로 설정해 두면, 예전 세션 정보를 복원합니다. 편집하던 버퍼들을 다시 다 열어주는 편리한 기능입니다.

이번 도전은 성공?

이번에는 Emacs에 안착할 수 있을지도 모르겠습니다. 예전에 포기했던 기간이 넘도록 계속 잘 쓰고 있고, 틈틈이 꼬물꼬물 설정을 건드리며 함수도 만들어서 쓰고 있습니다.

아직 경험이 미천해서 벌써 뭐라고 말하기는 어렵지만, 처음 익히기에는 노력이 많이 필요하지만, 조금 익숙해지면 꽤나 강력하게 활용할 수 있기에 많이 쓰이고 있는 것 같다는 생각이 듭니다.

새로이 도전하시려는 분께 조금이나마 도움이 되기를 기대합니다.

--

--

김대현
HappyProgrammer

시니어 백엔드 개발자. 함수형 프로그래밍을 선망하며 클로저, 스칼라, 하스켈로 도전하며 만족 중. 마이너리티 언어만 쫓아다니면서도 다행히 잘 먹고 산다. 최근엔 러스트로 프로그래머 인생 확장.