이맥스(Emacs) 사용기
Emacs 를 나의 기본 에디터로 사용한지 10년이 좀 안되었나 싶다.
처음 어떻게 emacs 를 알게 된 건지 잘 모르겠다. 아마도 리차드 스톨만에 관한 글을 읽다가 알게된 것일 수 있다.
처음 emacs를 알게 되었고 사용해 보고 싶었지만 몇가지 의문이 있었다.
- 지금도 emacs가 개발 운영되고 있을까?
- 플러그인이 계속 업데이트 되고 있나?
- 한글 문자셋을 제대로 지원하나?
처음 마음 먹었을 때 들었던 의문들
첫째로 든 의문은 내 주변에 emacs를 사용하는 사람이 없는데 과연 지금(처음 emacs를 알게 된 당시)도 emacs가 개발되고 운영되고 있을까 하는 의문이었다. 만약 유지보수되지 않고 있거나 정식으로 업데이트 되지 않는다면 현업에 사용하기에는 무리일 거라 걱정했기 때문이다. 구글에 emacs 를 검색하면 GNU Emacs 페이지로 이동한다.

당시는 지금으로부터 10년 전이기 때문에 웹페이지 디자인이 텍스트 위주였지만 지금은 그래픽을 가미하여 친절하게 소개하고 있다.

리눅스에서는 패키지 매니저를 통해 설치하는 방법이 있고 윈도우즈는 설치 파일 또는 압축파일을 풀어 사용할 수 있다.
두번째 의문은 플러그인이 최신으로 업데이트 잘 되고 있을까 였다. 만약 최신 개발 언어를 제때 지원하지 않는다면 개발할 맛이 나지 않을 것이기 때문이다.
Emacs 플러그인은 Emacs package 로 불리며 https://elpa.gnu.org/ 저장소(ELPA)를 통해 운영중이다.
기본 저장소보다는 https://melpa.org/ 저장소(MELPA)에 활발하게 패키지가 업데이트 중이며 간단하게 emacs 초기 파일에 저장소를 추가 할 수 있다.

참고로 지금의 나는 clojure 로 개발을 하고 있고 CIDER 라는 IDE(emacs package 형태로 설치)를 사용하여 개발 중이다.
세번째 의문은 한글 문자셋을 제대로 지원하는지 였다. Emacs 가 GUI 버전이 있기는 하지만 기본은 VIM 과 같은 터미널 기반 에디터이고 윈도우즈에서 사용하는 CP-949 포맷으로 된 파일을 터미널 화면에 제대로 화면에 표시할 수 있는지, 한글 입력이나 한자 입력이 가능할지, 제대로 화면에 표시되는지 등이 궁금했다.
결론은 emacs는 대부분 편집기에서 지원하는 문자셋을 대부분 지원하는 것으로 보인다. 나에게 모든 문자셋을 확인할 요량은 없지만 최소한 3대 운영체제(리눅스, 윈도우즈, 맥)에서 한글 파일을 편집하는데 문제가 없고 교차로 운영체제를 바꿔서 동일한 파일을 수정하는데에도 문제가 없었다.
입력기 부분은 좀 특이하다.
보통 emacs 자체에서 제공하는 입력기를 사용하게 되는데 예를 들면 윈도우즈용 GUI 버전 emacs 에서 한글 입력을 하기 위해서 윈도우즈(운영체제) 입력기는 '영문'으로 두고 emacs 가 내장한 입력기를 '한글(korean-hangul)' 로 설정하고 입력한다.
처음엔 입력기가 운영체제와 분리되는 것이 특이한 경험이라 의아하였지만 큰 장점이 있다.
- 어떠한 운영체제를 사용하건 동일한 입력기 환경을 제공한다.
- Emacs가 제공하는 입력기 종류가 운영체제보다 더 다양하다.
Emacs 특징
Emacs 를 익숙하지기 위해서는 emacs 특유의 기본 개념을 익혀야 했다.
1. 키보드 단축키 체계
VIM 과 비교를 하자면 VIM 의 키보드 단축키 지정은 키보드 배열 위주로 정해져 있다. 예를 들어 VIM 에서 상하좌우 키는 h, j, k, l 로 지정되어 있고 키들이 일렬로 서로 모여있다. Emacs 는 의미 기반으로 단축키를 지정한다. Emacs는 상하좌우 키가 C-p C-n C-b C-f 로 지정되어 있다. (C 는 Control 키를 의미한다, C-p 는 Control 과 p 키). p 는 이전 줄, n은 다음 줄, b는 한글자 뒤로, f는 한글자 앞으로 커서를 이동하는데 의미하는 단어의 약자로 지정이 되어 있다(previous, next, backward, forward).
2. 명령 입력 체계
Emacs는 VIM과 같이 편집 모드, 입력 모드로 나뉘어져 있지 않다. Control 또는 Meta(Alt) 키와 알파벳 조합으로 명령을 내린다. 예를 들어 C-c C-f, M-x emacs-version RET 등으로 명령을 내리는데, emacs 단축키 표기법을 먼저 살펴 보면 C 는 Control 키를 의미하고 C-c 라고 하면 Control + c 키 입력을 말하며 이러한 키를 복수개 조합하여 하나의 명령이 형성되기도 하며 C-c C-f 는 Control + c 키 입력 후 Control + f 키까지 입력해야 하나의 명령이 수행한다. M 은 meta 키를 의미하는데 컴퓨터 시대 초기에 키보드에 meta 키가 보편적으로 있었지만 윈도우즈용 키보드에는 alt 키가 대체하고 맥용 키보드는 option 키가 대체한다(맥 터미널 옵션에 'option 을 meta 키로' 설정해야 제대로 동작한다). C 조합 단축키는 명령을 바로 수행한다. M-x 는 명령을 입력할 수 있는 상태를 활성화 시키며 emacs 내 수많은 명령을 수행할 수 있다. 예를 들어 C-c C-f 는 파일 열기 명령이고 파일명 또는 경로를 입력하면 해당 파일 또는 경로를 연다. C-x C-c 는 emacs 를 종료한다. M-x emacs-version RET 은 emacs 버전을 확인한다(RET 은 엔터키).
3. Major-mode, minor-mode
예를 들어 markdown 파일을 열어 보자. markdown-mode 패키지가 설치되어 있지 않다면 일반 text 파일과 같이 밋밋하게 표시된다. package 관리자를 통해 markdown-mode 를 설치하고 파일을 다시 열면 markdown header, link, table 등을 구분할 수 있는 색상과 폰트로 표시가 되고 markdown 스타일 수정을 할 수 있는 단축키가 제공된다. 파일마다 하나의 major 모드가 적용될 수 있고 추가적인 기능(자동 완성 등)이 minor mode 로 복수개 적용될 수 있다. 일반적으로 파일 포맷에 맞는 major 모드 패키지를 설치하고 해당 major 모드의 단축키 등의 기능을 익히는 방식으로 emacs 를 다채롭게 사용한다.
마우스 중심 vs. 키보드 중심
GUI 편집기의 장점은 마우스를 사용할 수 있다는 점일 수 있다. 마우스를 이용하면 단축키를 외울 필요도 없고 현실에서 물건을 들어다 놓는 것 같은 제스처 등을 사용할 수 있기 때문에 편하다. 반면 이런 동작들을 모두 키보드로 수행해야 한다면 일부 마우스로 하는 것 같은 자연스로운 동작은 할 수 없기도 하고 외워야 할 것도 많아지고 머리를 좀 더 사용해야 가능할 것이다. 이러한 부분에서 굳이 GUI 를 사용할 수 있는데 TUI 기반의 편집기를 선호하는 경우는 별로 없을 수 있다. 하지만 내 경우는 vscode 나 GUI 기반의 IDE 등이 많이 있지만 가능하면 emacs 를 선택하고 있다(GUI 용 emacs 이기는 하지만 키보드 중심으로 인터페이스를 사용한다). 변태인가라는 생각이 당연히 들겠지만 키보드 중심 인터페이스에는 몇가지 장점이 있다.
1. 빠르고 정확하게 작업을 수행할 수 있다.
어떻게 마우스로 끌어다 놓는 것과 키보드로 선택하고 복사하고 창 이동하고 커서 이동하고 붙여넣는게 더 빠를 수 있을까? 여기서 주의하게 생각할 점은 단순히 빠르다가 아니고 빠르고 정확하다는 점이다.
마우스로 정확하게 원하는 영역의 텍스트의 시작과 끝을 드래그 하는 동작은 생각보다 순간적으로 많은 집중을 요한다. 1px 차이로 글자의 경계가 나뉘게 되기 때문에 집중이 많이 필요하고 작업이 반복된다면 피로는 급상승하게 된다. 피로도 상승은 집중력을 흐트리고 정확도는 줄어든다. 끌어다 놓을 때도 마찬가지이다. 드래그 한 상태에서 손가락을 떼는 동작을 하면서 손은 미동하게 되고 1px 차이로 커서 위치는 달라지게 된다. 만약 키보드 작업과 마우스 동작을 동반하는 작업이라면 문제가 더 복잡해 지게 된다. 한손이 키보드를 떠나 마우스를 찾아서 떠나고 다시 돌아오는 동안 많은 오작동의 가능성이 증가한다. 키보드 입력 중 마우스를 잡기 위해 한손이 키보드를 떠나야 하고 다시 키보드 정위치로 돌아와야 한다. 시선을 화면에 고정한 상태로 이러한 동작은 정확도를 요하고 반복되는 작업일 수록 실수를 유발할 가능성이 높다.
반면 키보드 중심 인터페이스에 숙달한 경우 우선 두 손이 키보드 영역 밖으로 나가는 일이 줄어든다. Emacs 단축키 배열은 대부분 알파벳과 숫자 영역 안에 포진되어 있다(Page Up, Page Down, 방향키도 C-v, M-v, C-p, C-n, C-b, C-f 단축키로 지정이 되어 있다). 두 손이 키보드 영역 밖을 나갈 일이 없기 때문에 자리를 다시 잡는 신경을 쓰지 않아도 되고 실수의 확률을 줄여준다.
2. 스크롤은 정말 편한가?
우리의 뇌는 정말 편한걸 추구한다. 스크롤이 긴 문서를 다시 열었을 때 줄번호를 외우거나 특정 키워드를 기억하기 보다는 스크롤 위치로 이동해 위 아래를 훑으며 해당 위치를 찾는다. 그러는 편이 뇌가 기억할 항목을 줄여주기 때문에 더 편하다는 인식이 있다. 하지만 실상을 보면 매번 스크롤 위치를 정확히 잡지 못하고 이건가 하고 한참 읽다가 보면 중간에 와서야 '아, 아니네' 하고 다시 스크롤을 하고 있는 모습을 매일 반복하고 있다. 키보드 인터페이스에서는 손으로 스크롤 위치로 이동하는 동작은 없다. 줄번호를 입력하거나 찾고자 하는 키워드를 입력하여 찾아서 이동한다. 평소에 누구 이름도 기억 못하는데 기억할 것이 많아 지기 때문에 어려울 거라 생각하지만 몇번만 훈련해 보면 마우스 스크롤 할 때보다 몇 단계만 거치면 매번 정확한 위치로 이동하게 되는 마법을 경험하게 될 거다. 이런 방식이 익숙해지게 되면 다음에 빠르게 다시 해당 위치로 돌아올 수 있는 연관 키워드를 머리 속에 기억해 두거나 구조를 익히고 문서를 닫는 습관이 생기게 된다.
Emacs가 답은 아니다
그렇다고 항상 emacs 만 고집하는 것은 아니다.
만약 내가 맡은 업무가 특정 IDE 가 업무 효율을 높여주거나 killer 기능이 있다면 당연히 IDE 를 사용한다. 예를 들면 Java 기반의 개발의 경우 좋은 IDE 들이 많이 있고 별도 설정 없이 개발 환경이 잘 준비되어 있는 반면 emacs 로 그러한 환경을 구사하려면 설정이 너무 어렵기 때문에 굳이 emacs 를 사용하지는 않는다(가능은 하겠지만). 그리고 ec2 환경 같은 제약된 리소스 환경에서는 nano 가 가볍고 사용법도 편해서 제일 선호한다.
결론, emacs 는 계속 활발하게 배포되고 있다. 나의 것으로 만들 가치는 충분하다.