Emacs

원 개발자리처드 스톨먼
현재 개발자들GNU 프로젝트
최초 릴리즈1976년
안정 버젼25.1 (2016년 9월 17일)
프리뷰 버젼현재 없음
개발 언어C, Emacs Lisp
운영 체제크로스 플랫폼
언어영어
라이선스GNU GPLv3
웹 사이트[1]

500px

1 개요

이맥스. 유명한 UNIX 환경 텍스트 에디터 중 하나이다. 확장성이 매우 높은 것으로 유명한데, 키보드 단축키만 해도 1,000개가 넘어가는 엽기적인 면모를 갖추고 있다. 더군다나 매크로가 엄청나게 많아서, 다 익히는 것은 불가능에 가깝다. 1970년 중반부터 개발이 시작되었으며 2016년 현재까지도 활발하게 개발이 이루어지고 있는 상황이다. 역사가 긴 만큼 여러 버전이 있는데 역시 가장 정통으로 인정받는 버젼은 GNU Emacs 로, 현재 GNU Project(오픈 소스 프로젝트)에서 관리하는 버젼이다. 그러나 이 외에도 XEmacs, Aquamacs 등 다양한 버젼이 존재한다.

본디 TECO 라는 에디터에 매크로를 짜 넣으면서 개발이 시작되었는데 유명한 리처드 스톨먼이 첫 주자로 개발을 시작했다. 이후 TECO 에디터 매크로를 짜던 여러 사람들이 합세하여 본격적으로 개발이 시작되었다.

Editors.png
제일 오른쪽 포크 숟가락은 한국에서는 주로 군인들이 쓰는건데
UNIX계열에는 이맥스 말고도 vi라는 녀석이 있는데, 이 둘이 에디터 양강 체제를 구축하고 있는 상황이고, 오랫동안 둘을 비교하는 떡밥과 함께 키배가 진행되었다. 심지어 에디터 전쟁이라는 용어를 사용할 정도. 제공하는 기능면에서는 이맥스가 확실한 우위에 있었지만[1] , 성능과 가벼움[2] 및 편리한 사용성[3]에 있어서는 vi 가 우위에 있었기때문에 결국 에디터 워는 결론없이 네버엔딩 스토리가 되었다. M16 vs. AK-47 과 비슷한 경우라 볼 수 있다. 역시나 최강자는 ed

2 연혁

처음 개발이 시작된 곳은 MIT AI Lab에서 Incompatible Timesharing System (ITS) 이라는 OS에 쓰이던 TECO(Tape Editor and Corrector)라는 에디터에서 시작되었다. 요즘 쉽게 접할 수 있는 에디터들과 달리 TECO는 편집 모드, 추가 모드, 문서 출력 모드가 따로 존재했으며 텍스트를 타이핑해 입력했어도 바로 현재 편집중인 문서에 반영되지 않고 명령어를 이용하여 해당 문자열을 입력하도록 프로그램 하여야 비로소 입력되는 불편함을 자랑했다[4]. 이와 비슷한 에디터로 vi 의 전신인 ed 라는 녀석이 존재한다.

스톨먼은 1972~1974년 동안 스탠퍼드의 AI Lab 을 방문하면서 E라는 에디터를 접하게 되는데, 이게 바로 WYSIWYG(What You See Is What You Get)기능을 가지고 있었다. 여기에 놀란 나머지 이후 MIT로 돌아와서 TECO에 비슷한 기능을 구현하게 되고, 편의를 위해 여러 매크로를 추가하면서 점점 불려나가기 시작했다. 이후 매크로가 점점 많아짐에 따라 MACS 라는 은어가 쓰이게 되었고, Editing MACroS라고 아예 새로운 이름으로 부르게 된 것이 EMACS 의 시작이다. 초기 버젼은 MIT AI Lab에서 쓰이던 PDP계열 컴퓨터에서만 쓸 수 있었다.

이후 다른 기종에 쓰일 수 있도록 코드를 다시 쓰는 과정에서 SINE, EINE, ZWEI 같은 에디터가 나왔는데, 이들의 특징은 LISP 언어를 사용하여 짜여졌다는 것이었다. 이후 LISP 언어는 모든 EMACS 버전에서 채용되었고 현재까지도 GNU Emacs나 나머지 변종들은 전부 LISP 언어 기반으로 작동한다. 1981년에 드디어 C로 쓰여진 Emacs가 UNIX에 쓰이기 시작했는데 이 당시에는 자유 소프트웨어가 아니었다.

3 GNU Emacs

앞에서 언급한 1981년 버전은 상용이었기에 1984년 리처드 스톨먼은 Emacs를 자유 소프트웨어로 만들려 했다. 1981년의 상용 버전과 다른 점은 LISP 엔진을 오리지널로 교체하였고 거의 모든 코드를 새로 짜 넣으면서 GNU로써 최초의 프로그램으로 나오게 된다. 이후 상용 버전의 그것보다 더 많은 기능을 구현하게 되어 결국에는 다시 UNIX로 돌아와 상용 버전을 밀어내게 되었고, UNIX에서 사용되는 Emacs 에디터의 가장 대표적인 예로 자리잡게 된다. 이후 1986년에 보안 허점이 발견되어 루트 계정이 털리는 사건이 일어난 후 1999년 까지 성당과 시장 모델을 도입함에 따라 개발이 지체되게 된다. 흑역사 현재는 스톨먼이 직접 개발하는 것은 아니고 슈테판 모니어(Stefan Monnier)와 정이동(Chong Yidong)에게 물려주었다.

4 변종들

4.1 XEmacs

1991년에 시작된 가장 유명한 Emacs 변종으로, Lucid Inc. 라는 업체에서 GNU Emacs 알파19 버젼을 기반으로 개발되었다. 초창기에는 Lucid Emacs 라 불리우다 XEmacs 로 바뀌었다. 현재는 GPLv2 라이선스를 통해 공짜로 풀려 있다. GNU Emacs 개발이 지체된 흑역사기간 중 C++ IDE를 만들어야 하는 입장에 놓인 개발자들이 직접 개발한 것. 덕분에 개발 당시에는 GNU Emacs 보다 훨씬 미려한 GUI인터페이스를 가지고 있었다. 본디 Lucid Inc. 에서 개발되었기 때문에 처음에는 당연히 상용이었으나 1994년 도산하는 바람에 결국 오픈 소스 프로그램으로 전환하게 된다. 이름을 XEmacs 로 바꾸었는데 X Window System 과는 전혀 관계가 없고, X로 붙인 이유는 단지 더 이상 Lucid를 붙일 이유가 없었기 때문.

역시나 GNU Emacs 와 같은 기능을 가지고 있으며 많은 언어를 지원(적어도 이들 언어로 문서를 작성 가능)한다. 물론, Windows와 OS X 플랫폼에서도 돌릴 수 있다. Emacs Lisp 언어를 이용해 여러 기능을 건드릴 수 있다는 점도 동일하다. 이렇듯이 기능이 흡사한 만큼 GNU Emacs 와 저작권 문제로 시끄러웠던 적이 있지만[5] 뭐, 이것도 이제는 오픈 소스인데... 게다가 현재 XEmacs 코드 전반의 저작권을 행사하는 곳은 다름 아닌 GNU. 게다가 지금도 GNU Emacs 와 코드를 공유할 정도.

4.2 다른 변종들

여러 가지 변종들이 나왔는데, 일본에서 윈도우즈 기반으로 제작된 Meadow, XEmacs 의 사생아 SXEmacs, OS X 용으로 개발된 Aquamacs 가 유명하다. 이것들 외에도 클론 버젼들이 아타리 사태를 방불케 할 정도로 많이 출시되었다. 이렇게 된 이유는 당시 Emacs 가 돌아가는 환경이 비교적 고사양이었기 때문. 32비트 어드레스 공간과 1메비(MiB) 바이트[6]의 램을 필요로 했기 때문이다. 유명한 변종들의 리스트는 다음과 같다.

  • MicroEMACS 이름과 같이 저사양(?) 컴퓨터에서 돌아가는 것을 목적으로 개발되었고, 여러 가지 파생형이 존재한다. Emacs에 비하여 현저하게 적은 기능과 적은 용량이 특징이다. 참고로 이 분도 이것을 뜯어고쳐 사용하고 있다는 듯.
  • mg 본디 MicroGNUEmacs 로 불렸으나 GNU Emacs 와의 혼동을 막기 위해 mg로 개명. 현재 OpenBSD 에 기본으로 들어간다.
  • NotGNU 도스, 윈도우즈, 리눅스용으로 개발된 가벼운 버전.
  • JOVE 매크로 프로그래밍이 불가능한 버전.
  • Freemacs 도스 버젼으로 64 킬로바이트의 메모리에 알맞게 고친 버전.
  • MINCE CP/M에 쓰이도록 수정한 버전.
  • Zile
  • Climacs Common Lisp 언어를 쓰도록 수정한 버전.
  • Yi, Haskell 언어로 쓰인 Emacs
  • QEmacs 수백 메가 이상의 큰 파일을 수정할 수 있는 UTF-8 기반의 Emacs
  • Epsilon 역시나 또 다른 클론. DOS, Windows, Linux, FreeBSD, OS X, O/S 2 등 여러 운영체제에 사용될 수 있는데 Lisp 말고도 C언어로 직접 익스텐션을 제작할 수 있다.
  • Joe's Own Editor
  • e3
  • JED
  • PceEmacs
  • xyzzy 일본산 Emacs 클론, 코딩좀 한다는 일본 엔지니어들은 요걸 사용한다는데, 최근에는 업데이트 되고 있지 않다. 지원하는 OS도 Windows뿐이다. 다운로드 :[2]

등등 많다...

5 특징

이맥스는 기본적으로 텍스트 에디터이다. 즉, 워드 프로세서와 달리 폰트 기반의 텍스트를 다루는 것이 아니고, 노트패드처럼 텍스트를 다룬다. 기본적인 텍스트 에디터 기능 외에도 단어나 문장 단위로 편집할 수 있는 기능을 가지고 있고, 여타 프로그래밍 언어 개발 환경에서 보이는 구문 강조 기능 및 매크로 기능이 존재한다. 기반은 TECO같은 물건이지만 사실상 현재 나와 있는 텍스트 에디터들과 사용 방법은 다르지 않다.

LISP의 dialect로, Emacs Lisp라는, 컴퓨터공학 전공이 아니면 보통 접할 일이 없는 특이한 컴퓨터 언어 인터프리터를 내장하고 있어서 마음만 먹으면 여러 가지 강력한 매크로는 물론, 심지어 게임 까지도 만들어 버릴 수 있다. 대략 마이크로소프트 오피스의 비주얼 베이직과 비슷하다 볼 수 있는데, 마찬가지로 인터프리터 방식을 사용함에 따라 프로그램을 재 시작하거나 재 컴파일할 필요 없이 새로운 기능을 마음껏 구현할 수 있는 것이 특징이다. 이맥스를 확장하는 방법은 대략,

  • 익스텐션을 내 입맛에 맞도록 수정, 추가하는 방법. 예를 들어 색상이나 그래픽 UI등을 바꾸는 것들이 가능한데, 이는 사실 Lisp 코드를 건드리지 않아도 가능하다.
  • 키스트로크를 녹화(?)하여 매크로를 만드는 방법.
  • Emacs Lisp를 이용하여 안드로메다 스러운 기능을 구현하는 방법. 보통 설정 파일인 .emacs 에 구현하게 되는데 이 덕분에 보통 Emacs 애용자들의 설정파일은 여러개로 분할되어 수백 수천줄이 넘어가는 게 특징이다.

으로 나뉠 수 있다. 관련만화

이렇기 때문에 만들어 넣기만 한다면 대체로 이맥스로 못 하는 것을 발견하기가 어려울 정도인데, 덕분에 타 프로그램들과 연동하여 거의 무한에 가까운 확장성을 자랑한다. 예를 들어, 프로그래밍을 위한 IDE(Integrated Development Environment)를 구성할 수도 있고, LaTeX 타입세팅을 위한 환경을 조성하는 것도 가능하다.

6 Emacs Lisp Package Archive, ELPA

버젼 24부터 기본으로 포함된 Emacs의 패키지 관리 시스템이다. 버전 24 부터 ELPA 가 내장되었기 때문에, package-list-packages 모드에서 대부분 간단하게 설치/삭제가 가능하다.

관련 링크: http://emacswiki.org/emacs/ELPA

유명한 저장소 주소 (대개 이 세 군데의 저장소에 있는 패키지로 Emacs가 할 수 있는 거의 모든 것을 다 할 수 있다.)

아래는 유명한 확장 기능들을 나열한 것이다.

  • AUCTeX
  • Calc
  • Calendar-mode
  • Dissociated Press
  • Dunnet 게임
  • Ediff
  • Emerge
  • Emacs/W3 웹 브라우저!
  • ERC IRC클라이언트
  • Gnus
  • MULE
  • Org-mode
  • Info
  • Planner
  • SES 스프레드시트...
  • VM (View Mail) 이메일 클라이언트
  • Wanderlust
  • EMMS 비디오 플레이어!!!

물론, 이 외에도 엄청나게 많다... 그리고, 게중에서 AUCTeX와 Org-mode[7] 는 가히 이맥스의 킬러앱이라 봐도 될정도로 많은 기능을 내장하고 있고, 프로그래밍이나 다른용도로 쓰지 않더라도 저것만을 위해 이맥스를 사용하는 사람들도 있을정도. 근데 기능이 많은만큼 배우기도 어렵다.에디터 속의 일개 모드 주제에 매뉴얼만 책한권 분량 저것들이 다 잘 유지보수되는것은 아니지만, 인기있는 확장은 유지보수가 잘되는편.

7 퍼포먼스

앞에서 언급되었다시피 초창기에는 상당한 고사양의 머신을 요구했으므로 퍼포먼스 자체는 텍스트 에디터 치고는 별로 좋지 않았다.[8] 이는 주로 Lisp 인터프리터를 사용해야 했기 때문인데 덕분에 Eight Megabytes And Constantly Swapping이라는 오명[9]을 얻기도 할 정도였고, 에디터 전쟁 키배가 일어나면 항상 까이는 원인이 되고 말았다. 그러나 하드웨어의 발전으로 이러한 지적들은 더 이상 유효하지 않게 되었고, 현재 사용되는 GUI 워드 프로세서 혹은 IDE 프로그램들과 비교하면 훨씬 빠르게 로딩된다. 게다가 vi 의 정식 후계자라 볼 수 있는 vim 도 기능을 이거저거 추가하다보니 이맥스와 사이즈 측면에서 비견이 가능할정도로 불어나게 되었다.[10] 32비트 시스템에서 거대한 파일을 다루는 데 문제가 발생하기도 했는데, 23.2 버젼 이전에는 고작 256 메가바이트 정도의 크기만 다룰 수 있었고, 현재도 512메가바이트 정도 밖에는 못 다룬다. 물론, 64비트 시스템에서는 이러한 문제가 없다. 1024 페타바이트가 최대 한도.

또 타 OS에 비해 Windows에서 성능이 떨어지기도 한다. 주로 텍스트 렌더링 부분이 그러다보니 저사양 컴퓨터에서는 스크롤하다가 렉이 심하기도 하다.

8 플랫폼

GUI 파트를 제외한 순수한 이맥스는 Elisp 인터프리터와 소수의 primitive function 정도만 C 로 만들어져있으며, 나머지는 전부 그걸 사용하는 Elisp 코드로 구성되어있다. 바꿔말하면, C 언어가 지원되는 환경에선 이맥스가 돌아간다. 그리고, 윈도우를 비롯한 대부분의 플랫폼은 다 C 언어가 지원되기때문에 현존하는 거의 모든 운영체제를 지원한다. 유닉스 계열 시스템은 물론, 도스, 윈도우즈에서도 구동시킬 수 있는 버젼이 있다. 또한, 텍스트 터미널에서 구동시킬 수도 있고, GUI 환경에서 구동시킬 수도 있다는 특성이 있다[11]. Unix 계열의 플랫폼에서는 X Window 시스템에서 gtk 라이브러리 기반으로 작동하고, OS X에서는 Cocoa 기반으로 작동(현재 24.3 버젼)한다. 물론, 윈도우즈에서도 다른 GUI 라이브러리를 설치할 필요 없이 잘 작동한다. 윈도우즈 버전같은 경우에는 인스톨도 필요가 없는 포터블 버전이다.

9 지역화

지구상의 모든 언어를 전부 사용할 수 있다. 영어는 물론, 한국어, 중국어, 히브리어, 페르시아어 등을 지원하며, ispell 이라는 스펠링 체크 프로그램과 연동시키면 맞춤법 검사도 가능하다. 역시 UTF-8을 지원하기 때문이다. 그러나 한 가지 문제는 오른쪽에서 왼쪽으로 쓰는 문자의 경우 현재 안정 버전에서는 문제가 있으나 bzr에 있는 최신 버전은 문제 없다.

또 한 가지 단점은 유저 인터페이스가 영어로 쓰여져 있었고, 현재까지 지역화가 안 되었다는 것이다. 물론 튜토리얼도 영어로 되어 있으므로 제대로 사용하려면 영어 공부가 필수이지만[12], 이걸 사용하는 사람들 중에 이 정도 영어를 해석하지 못 하는 사람은 없을 것이다.

덤으로 시각장애인들을 위해 청각적으로 피드백을 주는 이맥스피크(Emacspeak) 시스템을 지니고 있다.

10 커스터마이제이션

vi 의 단타 커맨드가 이맥스에서는 배 이상으로 불어나는게 대부분이기때문에 vi 에 비해 편집이 불편한것은 기정 사실이다. 하지만, 이맥스에서는 vi 에서 불가능한 수많은 것들이 가능하고, 그중 하나가 유연한 커스터마이제이션이다. 일단, 이맥스에서는 모든 단축키를 바꾸는게 가능하다. 단축키 수준을 넘어서 아예 Extensible VI Layer(Evil)vi 악마를 죽입시다 vi 는 나의 원수 등과 같이 vi 스타일로 바꿔버리는것도 가능하며, vi 를 넘어선 본인에게 맞춤형식으로 바꿔버리는것 역시 가능하다. 키를 바꾸는것 외에 기존 기능을 이용하여 새로운 기능을 추가하고 여기에 단축키를 붙이는것도 문제가 없다. 또한, vi 에서 구경하기 힘든, 보통은 쓸데없지만 누군가에게는 유용할 수 있는 벼라별 희안한 기능을 디폴트로 다 포함하고 있는데, 현재 커서가 가리키고 있는 문자의 폰트에 대한 정보라던가 버퍼에서 선택한 부분만 문자 인코딩을 바꾸는 기능[13], 화면의 문자를 가지고 장난치는 기능[14]등을 포함하여 이리저리 찾아보면 그야말로 lisp 해커들의 잉여력을 보여주는듯한 기능들이 넘쳐흐른다.

init file 의 설정을 포함하여 자가 커스터마이제이션은 Elisp 코드로 하기때문에 기본적인 Lisp 지식이 필요하지만, 워낙 많은것들이 이미 built-in 함수로 정의되어있기때문에 Lisp 의 기본적인 문법정도만 아는 수준으로도 상당히 유용한 커스터마이징이 가능하며, 패키지저장소에서 다운받은 패키지의 커스터마이제이션 역시 동일하게 가능하다.

덕분에 vi 가 단순히 키스토로크 수준의 중독성을 보이는 반면, 이맥스는 Elisp 이라는 금단의 영역으로 발을 들여 놓게 되면 사용한 시간에 비례하여 용도나 워크플로우 자체가 아예 일반적인 에디터의 세계와는 점점 멀어지는 경향이 생긴다. 이때문에 골수 이맥스 유저들에게는 OS나 플랫폼은 그냥 하드웨어에서 이맥스를 작동시켜주는 무엇정도로 전락하고 모든 것을 이맥스로 처리하는 경향이 있다.Q:윈도우쓸래, OS X 쓸래, 리눅스 쓸래? A:이맥스만 돌아가면 아무래도 좋아...

11 사용법

11.1 커맨드

일단 이맥스를 실행시키면 노트패드와 비슷한 느낌으로 편집을 시작할 수 있다. 자판으로 문자 입력, 방향키로 커서 움직이기, 백스페이스로 지우기 등 전부 동일하며 키보드로 특수 명령을 입력하려면 주로 콘트롤 키와 메타키[15] 조합을 이용한다. 이 커맨드를 입력하는 방식이 약간 재미있는데, 예를 들어 저장을 하려고 하면 Ctrl+x를 누른 뒤, Ctrl+s를 누르면 된다[16]. 기능이 워낙 많아지다 보나 명령어를 입력하기 위해 마치 대전 격투 게임 스킬 사용하는 것 처럼 시퀀셜(?)한 조합을 하는 방식이다. 사용하다 보면 게임하는 기분? 사실 이부분이 vi 에 가장 밀리는 부분인데, vi 의 편집모드에서 단타 혹은 쌍타로 가능한 명령이 이맥스에서는 타수가 2배 가깝게 늘어나는 경우가 많은데다가 그 각각에 ctrl/meta 같은 modifier 키까지 조합되는 경우가 많아서 커맨드 입력방식으로만 보면 완전히 밀린다.

11.2 버퍼

Buffer(버퍼)라는 개념이 있는데, 탭 기능을 가진 에디터의 그것을 생각하면 된다. 그러나 이 개념이 약간 더 유동적이라, 현재 문서의 상태 및 커서의 위치, 명령어 조합 등을 나타내주는 '미니버퍼'라는 부분이 따로 존재한다. 여기서 문서 작업 외에 컴파일이나 타입세팅 명령을 내리던가, 검색 키워드를 입력하는 등 입 출력 작업을 하게 된다. 더 재미있는 것은 Bash 셸처럼 커맨드 라인 자동 완성 기능까지 있다. 이를 볼 때 얼마나 복잡한 명령어들이 많이 들어있는 지 실감할 수 있을 정도이다.

일반적인 버퍼는 탭 기능과 유사하지만, 사실상 각 버퍼가 하나의 윈도우[17] 화면을 나누어서 두 문서를 동시에 편집하거나, 한 문서를 부분 부분 나누어 편집하는 것도 가능하다. 심지어 한 버퍼는 문서를 펴 두고, 나머지는 설정 메뉴를 열고, 마지막 버퍼는 현재 돌리고 있는 프로그램의 결과물을 출력하는 등 다중 작업을 할 수 있다. 요즘에는 일반적인 일이지만 앞에 언급했던 것과 같이 1메가바이트가 초 고사양이었을 시기에는 그야말로 충격과 공포의 기능이었다 할 수 있다. 물론, 지금은 vim 도 지원한다.

12 비판

12.1 RSI

RSI 는 반복사용긴장성손상증후군 라는 흠좀무한 이름을 가진 질병으로, 젊었을때 타이핑 작업을 많이 한 사람의 손가락에, 특히 엄지손가락등의 강한 손가락보다는 새끼손가락등 약한 손가락에 자주 발생한다. Esc-meta-alt-ctrl-shift 라는 이명을 갖은 이맥스가 이 원인이 될 수 있다는 비판이 많다. 위 키들 대부분은 새끼손가락으로 누르기 쉬운 위치에 있고, 실제로 이맥스의 대부인 스톨먼도 위 질병으로 고생중이다(이게 가장 타격이 컸다). 이맥스가 처음 개발될 당시 키보드는 Ctrl 키가 스페이스 바 바로 옆에 위치하여 있었다. 이맥스의 커맨드들이 대부분 Ctrl 키를 동반하는 것이 이것 때문인데, 문제는 현재 많이 사용되는 IBM PC키보드의 경우 Ctrl 키가 대부분 끝쪽에 위치해 손가락을 쫙 펴야 하는 단점이 존재한다. 덕분에 새끼손가락이 많이 고생하는데[18], 이 때문에 Caps lock 키를 Ctrl키로 매핑하는 기능이 존재한다. 다만, OS X 버젼의 경우 자주 사용되는 커맨드를 OS X의 Command 버튼[19]으로 매핑하기 때문에 이런 문제가 적다. 그러나 익스텐션 커맨드의 경우 얄짤 없이 Ctrl키 조합을 써야 하니 그게 그거...

하지만, 사실 이는 이맥스만의 문제는 아니고 현재 IBM 키보드 배열 자체가 굳이 이맥스가 아니더라도 자주 쓰는 키들을 새끼손가락으로 누르기 좋은 위치에 배열하여 인체공학적으로 매우 좋지못한 배열을 갖고 있는것이 진정한 원인이다. 이맥스는 이것을 가속화하는정도라고 보는것이 옳다. 요즘은 저런 자주 쓰이는 키들을 중앙으로 몰아 엄지손가락 위치에 배열한 인체공학 키보드들도 있으며다만 가격이 흠좀무, 몇몇 이맥스 유저들은 오른발 왼발 위치에 페달을 배치하여 alt, ctrl 로 키맵하여 쓰기도 한다.드럼을 배우자. 텍스트를 편하게 편집하고 싶으면 주변기기를 사라고! 결국 뾰족한 해결책이 있다기보다는 생활 습관이나 개인적인 꼼수의 영역에 맡길 수 밖에 없는 불가피한 문제.

유독 ctrl, alt, shift 등을 많이 사용하기때문에 이맥스를 주력 에디터로 쓸 생각이 있을 경우, 왠만하면 저 키들을 엄지 위치로 뺀 인체공학 키보드를 장만하는것이 좋다. 키네시스, 말트론등과 같이 전통적인 고가의 모델도 있고, 최근 Truly Ergonomic 같은 경우는 ctrl, alt, shift 가 바깥쪽에 있긴 하지만 키맵으로 간단히 가운데 나열된 키와 바꿀 수 있다. 일반적인 키보드의 경우 페달을 장만하는것도 결코 나쁘지 않은 선택이다.[20]

12.2 모달 에디터

이맥스 유저들은 vi 를 불편하게 모드들이 존재하는 모달에디터라며 비판하는 경우가 많았다. 하지만, 실상을 보면 이맥스도 여기서 그다지 자유롭지 못하다. 이맥스의 경우 자주 사용하는 몇몇 명령어들을 제외하면 C-x, C-u, C-c, M-x 등으로 시작하는것들이 많다. 이는 사실 어쩔 수 없는것이, 이맥스가 제공하는 명령어는 수천개단위인데, 일반적으로 키보드에서 누를 수 있는 키는 100여개정도가 전부이고, 그것도 명령어로 사용가능한 키만 따져보면 몇개 되지도 않는다. 그러니, 저런식의 조합이 반드시 필요해진다. 문제는, 그런식으로 보면 다른 명령어를 위해 눌러줘야 하는 C-x 같은 키는 사실상 vi 에서의 normal mode 로 진입하게 해주고, 명령어 입력후 insert mode 로 자동으로 빠져나가게 해주는 키라고 볼 수 있게 된다. 결국, 이런 관점에서는 vi 는 normal mode 가 디폴트인 모달 에디터, 이맥스는 insert mode 가 디폴트인 모달 에디터라 해도 할말없다.

12.3 커서이동

vi 의 성공신화의 중심에는 hjkl 로 커서를 이동하는것이 있었다. 즉, 커서를 이동하고 다시 타자를 치고 할때 오른손이 바쁘게 키보드 가장자리의 커서키와 중심으로 왔다갔다 할 필요가 없다는것이 큰 장점으로 여겨졌다. 이맥스도 키보드 중심에서 커서키를 이동하는 방식을 제공하는데...C-n, C-p, C-f, C-b 가 그것이다. 보면 알겠지만, 손가락 배열을 전혀 생각하지 않고 '의미'위주로 만들어진 배치이다.(next, previous, forward, backward) 이맥스 tutorial 은 이것이 더 편리하다고 강조를 하지만, 실제로는 ctrl 과 조합을 해야한다는점, 그리고 키배치가 엉뚱하다는점때문에 사용이 오히려 불편하다며 커서키를 이용하는 사람이 많다.

12.4 이맥스는 OS

이맥스는 어찌보면 단순한 에디터라기보다 에디터의 탈을 쓴 가상 LISP Machine 이라 보는게 타당할정도로 엄청난 확장성을 가졌다. 여기에 버퍼를 이용하면 이맥스 내에서 거의 모든것이 가능하다며 하나의 OS 라고 찬양을 받던 시절이 있었고[21], vi 유저들도 이맥스는 '좋은 에디터만 존재했다면 완벽한 OS' 라며 공감을 하였다. 실제로, 에디터 기능에 더하여 웹브라우징, 메일 클라이언트, 간단한 게임, PIM 등 일반적으로 사용하는 대부분이 제공된다. 하지만, 이는 전적으로 CLI 시절에나 해당되는 것이다. 오늘날의 OS는 대부분 GUI와 멀티태스킹이 지원되는 환경을 제공하여, 에디터 윈도우를 열고, 옆에 이맥스가 제공하는것보다 '더 좋은' 웹브라우저를 열고, 이맥스가 제공하는것보다 '더 좋은' 메일 클라이언트를 열고 간단한 마우스 클릭으로 혹은 윈도우 매니저가 지원할경우 단축키로 간단히 이동하면서 사용이 가능하다. 덕분에 이런 장점은 빛이 바랬고 기호의 영역으로 전환되었다.

또한, 커맨드라인 위주로 사용하는 올드스쿨 유닉스 유저들에게 있어서도 이게 그리 좋은 평가는 못받았는데, 기본적으로 유닉스에서 제공하는 다수의 쉘 명령들을 깡무시하면서 자체적으로 그와 같은 기능을 하는 명령들을 새로이 탑재하고 독자적인 환경을 조성하는, 육중한 하나의 소프트웨어로 만드는것이 유닉스의 기본적인 철학에 크게 위배되었기때문이다. 실제로, 유닉스를 만들었던 벨 연구소의 개척자들인 데니스 리치, 켄 톰슨, 스트로스트럽, 롭 파이크등은 에디팅이라는 목적에만 충실하고 나머지는 다른 유닉스 툴에 의존하는 단순한 에디터인 ed, acme, sam 등을 끝까지 선호하였다. 이에 대해 쉘과 함께 딸려오는 수많은 유닉스 툴들 역시 bloated 인건 이맥스와 마찬가지고 선택의 문제라고 보는 주장도 있긴 하다.진짜 OS 와 경쟁을 하고앉았다.

12.5 난해함

editor-learning-curve.png
(...)

오늘날 이맥스가 뒤쳐지게 된 가장 큰 이유중 하나이다. 굳이 접근성이 높은 다른 위지위그 에디터와 비교할것도 없이, vi/vim 과 비교해봐도 Emacs 보다는 vi/vim 유저가 훨씬 많다. 그 가장 큰 이유는, 이맥스는 제대로 다루기가 매우 힘든 에디터이기 때문이다.[22] vi/vim 도 난해하다는 평가를 주로 듣지만, 자주쓰는 몇십개정도의 키 스트로크만 익숙해져도 웬만한 타 에디터의 생산성을 크게 앞서갈 수 있기때문에, 공들인 대가가 상당히 빠르게 찾아오는 편이다. 하지만, 이맥스의 경우, Elisp 이라는 하나의 프로그래밍 언어[23]에 어느정도 익숙해져 자신에게 적합한 세팅/기능을 만들어 적용하는게 가능해지기 전까지는 vi/vim 뿐만아니라 여타 에디터에 비해서도 뒤진다. 게다가, 유연성은 Elisp 보다 떨어지지만, vi/vim 에서 제공하는 빌트인 함수만으로도 편집으로만 제한하면 상당히 많은것들이 가능하기때문에, 굳이 일반 프로그래머들에게 생소한 Elisp 으로 바닥부터 짜야 할 이유가 별로 없다. 약간 과장해서 비교하자면, vim script 가 bash 라면, Elisp 은 C 언어 정도에 해당된다. C 언어는 물론 bash 로 하지 못하는 많은것들이 가능하지만, 일반적인 쉘 작업은 bash 로 못할것이 없으며, bash 몇줄로 처리가능한 작업이 C 언어로는 리얼 프로젝트가 돼버린다.[24] Elisp 으로는 vim script 로 구현하기 힘들거나 불가능한 터미널 에뮬레이터라든가, 멀티미디어, 게임, 메일 클라이언트 기타등등이 다 가능하지만, 정작 순수 에디터 기능으로 보면 vi/vim 과 이맥스가 큰 차이가 없다. 또한, 이맥스에서 복잡한 기능들을 구현한다고 해봤자, 잘해야 기존 IDE 와 비슷한 정도. 즉, 단순한 에디터 기능에는 vi/vim 와 비슷, 혹은 조작성문제로 비효율, 그 수준을 넘어 리팩토링등의 복잡한 기능에는 IDE 에 비해 메리트가 적어서 난해하기만 하고 중간에 끼인 상황이다.[25]

어째서인지 MS에서 .NET개발자들은 쓰라는 Visual Studio는 안쓰고[26](...) Emacs 에서 코딩후 콘솔에서 빌드를 한다는 얘기는 유명.

어쨌든 이러한 난해함 때문에 도전했다가 포기하는 유저가 대부분이며 도전할 엄두조차 내지못하는 사람들은 할아버지 프로그래머들이나 애용한다며 비난한다. 과거 유닉스로 이맥스를 가장 먼저 포팅했던 제임스 고슬링조차도 시대에 뒤쳐졌다며 이맥스를 깠다. 자사 넷빈즈 쓰라는 이야기이긴 했지만.

이러한 난해함에도 불구하고 사용하는 메리트를 끄집어내어본다면, 현존하는 모든 OS상에서 언제나 동일한 환경으로 사용가능한 프로그램 이란점일지도. 최근 많이 사용되는 Eclipse가 다양한 OS를 지원하여 경쟁자로 떠오르고 있지만, Eclipse는 아직까지 Emacs만큼 다양한 용도로 사용할 수 없다. Gnuplot같은 것들은 패키지가 준비되어 있지 않다. API는 있는데 논문 출판용 그림을 그릴 정도로 세세한 조작은 안 된다. 또한 LaTeX나 Octave용 패키지도 아직 부족하다.

그리고, 여전히 LISP 계열 언어를 개발하는데는 막강한 편리함을 제공한다. nREPL를 통해 별도로 실행되는 Lisp 프로세스와 통신하며 즉석에서 코드를 주입하여 실행해 결과를 보면서 코딩하고 디버그를 할 수 있다. 물론 다른 에디터나 개발환경에서도 이러한 것을 지원해 주기는 하지만 Emacs 만큼 편리하고 직관적인 환경을 제공하는 툴은 아직까지 찾기 힘들다. 물론 이렇다고 해도 학습곡선은 답이 없다.

13 Elisp

Common lisp 과 비슷하지만, 아무래도 좀 구형이라 Common lisp 에 비해 기능은 상당히 떨어진다. 그래서, Elisp 을 대체하자는 소리도 많이 나왔고 스톨만은 Guile[27] 이라는 언어로 대체할 생각이 있다는 이야기도 했다. 하지만, 저게 이미 10년도 더 전에 나온 소리인데 아직 구현이 안됐다. 물론, Elisp 코드가 수십만줄 이상이라 간단히 가능한것은 아니지만 대체를 위한 활동 자체가 미미하다. 결국 바닥부터 새로 만들기보다 Elisp 을 Guile 내에 임베딩하는식으로 얼마전 GSoC 에서 마이너 이슈만 좀 있고 거의 다 끝난듯한 늬앙스를 풍겼는데 GSoC 이후로는 다시 침체인듯.

14 참고

사용법을 알고 싶다면 여기저기 방문해 보자.

14.1 다운 받기

보통 Unix 기반의 운영 체제들은 기본적으로 탑재하고 있거나 손쉽게 패키지를 다운받을 수 있다.

데비안 계열의 경우 sudo apt-get install emacs, 레드햇 계열은 sudo yumdnf install emacs을 터미널에 입력해 설치할 수 있다.

OS X: Emacs For OS X 혹은 Aquamacs

Windows: GNU FTP에서 -bin- 이 들어간 파일을 다운 받아도 되고, 여기서 받아도 문제 없다. NT Emacs 등의 다른 버전도 있다.

Windows용은 기본적으로 32비트용밖에 배포되지 않고 있는데 직접 컴파일하기엔 조금 까다로운 점이있다. ( 게다가 대용량 파일 편집이 불가능해서 로그분석이라도 하려면 64비트는 필수)

윈도우용 64비트 Emacs는 여기서 다운받자 - Emacs-w64: [3]

  1. 다만 최근엔 많이 퇴색된 감이 있다 플러그인 개발과 자동관리 툴등을 등에 업은 vim쪽 활동은 매우 활발한 반면 이맥스쪽은 침체된 상황 그리고 난무하는 변종들간의 호환성이 떨어지는 점도 발전을 저해하는 요소로 지적된다
  2. vi/vim 은 터미널만 있어도 모든기능이 사용가능하지만 이맥스는 터미널 버전만으론 불편하고 X-Window버전이어야 편리하며 흔히 이맥스를 칭하면 Gui버전의 이맥스를 칭한다
  3. 실제로 클라이언트가 윈도우인 게임서버를 제외한 거의 대부분 분야에서 리눅스/유닉스가 압도적으로 사용되고 증가추세이다 특히 발전소 시스템과 변전소 시스템은 유닉스/리눅스가 전부라 해도 좋을 정도이다 업체에선 납품할 서버에 업무와 관계없는 툴이나 어플은 최소한으로 설치하거나 디폴트를 유지하는데 vi/vim이 안깔린 리눅스/유닉스 계열은 사실상 존재하지 않다보니 자연히 그러한 개발환경의 엔지니어들은 현장과 동일한 툴에 익숙해지는게 유리하기 때문이기도하고 이맥스 특유의 커스텀이 자신이 설정하지않은 환경에서의 사용에 심한 이질감을 느끼게하는것도 원인으로 지적된다 실제작업은 세팅이 완료된 서버에서 직접 혹은 ssh로 로그인해서 작업 및 유지보수를 하다보니 본인 컴에 이맥스가 깔려있더라도 결국 vi/vim을 쓰게된다
  4. 사실, 이 당시 에디터들은 이 정도면 편리한 것이었다. 옛날에는 펀치 카드로 프로그래밍을 했다는 것을 상기해 보자.
  5. 앞에서 언급되었듯이 XEmacs는 본디 기업용으로 개발한 것.
  6. 2^20 바이트로 1메가바이트의 크기. 본디 1메가라는 단위는 10^6을 의미하는 것이라 컴퓨터의 단위와 약간 차이가 있다. 이를 정확하게 지적하기 위해 Mi, 메비라는 단위를 창설했으나... 일반적으로 많이 쓰이지는 않는 듯 하다.
  7. Org-mode는 익숙해지면 생활의 모든 기록을 Org-mode를 통해서 해도 될 정도로 편하다. 이맥스의 모바일 지원이 떨어지는 것과 높은 진입 장벽이 문제.
  8. 이맥스 개발된 시기를 생각해보자. 1970년대에 pc 성능이란 그야말로 안습그자체
  9. 이 또한 줄이면 EMACS가 된다. 다른 표현으로는, Emacs Makes A Computer Slow, Eventually Mallocs All Computer Storage, Eventually Makes All Computers Sick
  10. 다만, 이맥스의 경우 실행시 Elisp 설정파일을 불러오는데 Elisp 이 속도가 느린편이라 설정파일이 좀 거대한 경우는 실행시간이 여전히 vim 에 비해 상당히 떨어지는편이다. vim 도 물론 설정파일을 불러오긴 하지만, 거대한 정식 프로그래밍 언어인 Elisp 에 비하면 말그대로 그냥 설정파일 수준이라 오늘날 컴퓨터 기준으로 속도에는 거의 영향이 없다.
  11. 반대로 경쟁자인 vi는 gvim 같은 GUI기반의 파생형이 나오기 전 까지는 텍스트 터미널에서만 구동 가능했고, gvim의 경우는 별개의 프로그램으로 취급한다.
  12. 짧은 튜토리얼은 한글화가 되어있다. 하지만, 본격적인 매뉴얼이 시작되는 나머지 부분은 죄다 영어. 사실 분량이 정말 많기때문에 누군가 번역을 해준다면 한국 이맥스 역사에 이름이 남을지도 모른다!
  13. 보통 Dired 라는 파일매니저 모드에서 유용하게 사용할 수 있다.
  14. zone 이라는 모드인데 사용하면 현재 버퍼의 문자를 이리저리 바꾸고 움직이면서 혼자논다. 일종의 스크린세이버.
  15. 과거 키보드에서 Meta 키라는게 있었으나, 오늘날엔 당연히 없고 Alt 와 ESC 가 Meta 로 매핑이 되어있다.
  16. 이 경우 Ctrl 키를 그대로 누르고 있어도 상관 없다.
  17. 이맥스는 GUI 등장 이전에 나온 에디터라 윈도우라는 단어를 다르게 사용한다. 일반적인 GUI 에서 말하는 윈도우는 이맥스에서는 프레임이라 부르고, 이맥스에서 윈도우라 하면 하나의 버퍼를 표시하는 텍스트 에리어라고 생각하면 된다. 이맥스 내에서 화면을 상하 혹은 좌우로 분리하여 여러개를 띄우는것도 가능하다. (MS 사의)윈도우에서 하나의 이맥스 (GUI 적인 의미의)윈도우 안에 (이맥스에서 말하는)윈도우 여러개가 열려있다는 말장난도 가능하다. (...)
  18. 이 역시 vi 팬들한테 까이는 점들 중 하나.
  19. 스페이스 바 바로 옆에 있다.
  20. 페달은 왠지모르게 거부감이 들긴 하지만, 사실 고가의 인체공학 키보드보다 키감 좋은 일반배열 키보드에 페달이 더 나은 선택이다. 예를들어, C-u C-x C-e 같은 명령을 내릴때 아무리 키배치가 좋다고 해도 손가락 하나가 ctrl 을 누르고 있다 보면 불편해지는데, 페달에 ctrl 을 지정했다면 그냥 밟은상태에서 u x e 만 눌러주면 된다. 단축키 편의성이 거의 vi 에 근접하는 수준으로 향상되고 한손으로도 복잡한 명령을 간단히 칠 수 있게 된다.
  21. 멀티프로세스가 안되던 시절얘기.. 1990년대 이전을 생각하면 될듯
  22. 반면에 해커들에겐 가장 인기있는 에디터 이기도 한데, 강력함이 이유라기보다는 단지 해커 특유의 입맛에 맞게 뜯어고치기가 되더보니 인기가 좋은것. 리눅스 역시 같은 이유로 인기가 높다
  23. 단순히 이맥스 커스터마이징에 사용되는 문법정도가 아니라 진짜 프로그래밍 언어이다. 그것도 난해하다고 유명한 Lisp family.
  24. 물론, 비교를 위해 C 언어를 이야기한것일뿐 Elisp 자체도 상당한 하이레벨 언어고 vi 보다 훨씬 많은 빌트인 함수를 제공하기때문에 생산성은 C 보다 훨씬 높다.
  25. 사실 이맥스 해커들이 자주 사용하는 C/C++ 같은 언어는 문법과 소스코드 전처리기등으로 인해 파싱이 절대 간단하지가 않기때문에 왠만한 IDE 라도 리팩토링 지원은 소극적이다. 자바같은 언어쯤 되어야 IDE 수준에서 괜찮은 서포트를 받을 수 있고, 그렇기에 자바쪽은 이맥스 유저라 할지라도 이클립스같은 IDE 가 상당히 매력적인 선택지가 된다.
  26. 자사 제품이다지못미
  27. Guile 은 Scheme family 라 같은 lisp 이긴 하지만, Common lisp 쪽과 더 유사한 Elisp 과는 차이가 좀 있다. Common lisp 이 오만가지 기능을 다 때려넣은 C++ 이라면, Scheme 는 핵심적인 부분만 컴팩트하게 유지하는 C 언어로 비교할 수 있다. 물론, 예전 이야기이고 R6RS 부터는 Scheme 도 상당히 육중해졌다.