vim과 emacs 중 뭐가 더 좋냐는 질문의 답은 스스로 찾아야 한다.
둘 다 사용해보는 수 밖에..
그래서 결국 vim과 emacs 모두 사용해보고, emacs의 장점을 알게 되었고
지금은 emacs로 갈아탔다. 몇 가지 이유 때문이다.
여기서 vim이나 emacs 중 뭐가 더 뛰어나냐는 이야기를 하려는 것이 아니다.
vim, emacs 둘다 기종을 뛰어넘는 이식성이 뛰어난 편집기이고,
현재는 아무도 사용하지 않는 DOS에서도 잘 작동하다는 점을 소개하고 싶다.
이 세상에서 가장 뛰어난 편집기가 모두 DOS에서 작동한다는 것.
이것이 핵심이다.
먼저 vim의 최신버전은 7.4 버전이다. DOS용 버전은 DJGPP를 설치하고 7.4 src를 다운받아 빌드 시키면 7.4을 사용 할 수 있다. LFN문제가 있기 때문에 DOSLFN으로 LFN기능을 켜고 컴파일하면 문제없이 바이너리 파일이 만들어 진다. 홈페이지에는 공식적으로 7.3.46버전이 32비트 도스 버전의 마지막이다. 물론 16비트 dos용은 빌드가 멈춘지 오래다.
emacs는 사실 변종이 많기 때문에 gnu emacs를 기준으로 하자면,
현재 27까지 릴리즈 되었고 DOS용 버전은 26.2 까지
별도로 소스를 DJGPP를 이용해 도스용으로 빌드한 버전 몇 개가 FTP에 소개되어있다
FTP미러링 사이트 링크
미러링 사이트를 이용하지 않으면 다운로드 속도가 무척 느리다.
시행 착오를 거치면서 몇 가지 버전을 설치해보니 19.34, 24.5버전이 DOS환경에서 쓰기에 가장 가볍고 쓸만했다.
참고로 emacs 19 버전은 1994년도에 첫 릴리즈가 되었고 19.34버전은 1996년도에 릴리즈 되었다. GNU EMACS가 버전업 속도가 들쑥날쑥 하다. 18~19로 넘어오는데 10년이란 세월이 흘렀다. 1996년도에 릴리즈된 19.34버전을 추천하는 이유는
영어만 사용한다면 아무 문제가 없겠지만,
DOS환경에서 한글을 사용하려면 한글 3.0 같은 자체한글 프로그램이 아니면 보통 한글 바이오스를 사용해야 한다.
24버전은 파일수만 해도 수천개, 용량만 해도 170MB에 육박하고, DOS환경에는 어울리지 않는 MODE가 많이 추가되어 바이너리 실행파일 용량이 8MB나 된다.
실행시켜봐도 19.34 에 비해서 로딩속도가 조금 느려졌다. 순수하게 16비트 DOS에서 사용해보진 못했지만 DOS 7.1에서는 19.34버전이 로딩이 빠르고 가볍게 쓰기에는 알맞지만, 아쉬운 점이 최신의 기능들 특히 ORG모드 등이 포함되어있지 않은 옛날 버전이라는 점 때문에 최신 버전을 사용해야한다면 24.5를 설치해서 사용하길 권하고 싶다. 24.5 버전의 경우 용량은 비대해졌지만 나름 최적화가 되어 사용하는데 큰 문제가 없고, 최신의 EMACS기능이 모두 포함되어있다.
우선
19.34 버전의 DOS용 패키지에 대한 설명을 보자면
em1934b.zip Binaries and minimal runtime support, required
em1934r1.zip Full runtime support (1 of 3), required
em1934r2.zip Full runtime support (2 of 3), required
em1934r3.zip Full runtime support (3 of 3), required
em1934l1.zip Elisp sources (1 of 3), recommended
em1934l2.zip Elisp sources (2 of 3), recommended
em1934l3.zip Elisp sources (3 of 3), recommended
em1934s1.zip Emacs sources (1 of 3)
em1934s2.zip Emacs sources (2 of 3)
em1934s3.zip Emacs sources (3 of 3)
Binaries and minimal runtime support...................5MB
Binaries and full runtime support.....................20MB
Additional storage for Elisp sources..................15MB
Additional storage for MSDOS sources (em1934s1.zip)....6MB
Additional storage for the full sources...............12MB
순수한 프로그램만 사용하려면 em1934b.zip만 있으면 되지만 그것만 있으면 emacs가 바보가 되버린다.
em1934r1~3.zip 까지 설치해야 기본적인 emacs 기능을 쓸 수 있다.
기본 프로그램 5mb, 확장 패키지 20mb의 용량이 필요하다.
vim과 잠시 비교를 하자면
vim 은 기본 프로그램 외에 plug-in이 몇 개 포함 안된다. Full 패키지라고 해도 사실 레퍼런스 메뉴얼과 이런저런 문법파일과 합쳐져서 용량이 많아보이는 것 뿐이지 사실 실행파일과 핵심적인 플러그인 몇 개만 있으면 vim은 정상작동한다. vim script 파일을 추가해서 사용하는 식이고, 그것도 필요없이 _vimrc 파일 하나만으로도 얼마든지 커스터마이징이 쉽다. 하지만 emacs는 아주 기본적인 기능만 탑재되어있고, 실질적인 장점인 확장 기능은 lisp 스크립트가 뒷받침해주는 형식이다. 어떻게 보면 조잡하고 어떻게 보면 lisp만 추가하면 기능이 무한대로 확장된다는 환경이다. 그래서 emacs는 점점 기능이 추가될 수록 이상하게 거대해진다. 편집기 이외에 메일클라이언트 웹브라우저 irc , 터미널, 각종 메이저, 마이너 모드 파일 등 이 뒤섞여서 거대한 환경을 이루는 것이다.
실제로 자기가 쓰기 편하게 기능을 설정하려고해도 설정파일 자체가 문법이 lisp 이다.
lisp언어를 전혀 모르는 사람으로써 emacs 기능을 바꾸는게 쉽지 않다.
_vimrc의 설정기능 문법은 레퍼런스 매뉴얼만 보고 따라하거나 검색만 하면 쉽게 나오고
해결책도 거의 비슷한 답이 나와서 편하지만
emacs는 해결 방법이 여러가지다. ELISP 소스 코드를 설정파일에 넣어서 해결야하는데 lisp 소스가 작동하지 않는 것도 많다. 버전별로 사용가능한 함수와 추가된 소스가 달라 기능을 커스터마이징하는데 vim보다 시간이 더 소요되었다.
아무튼 기본 패키지인 b와 r1~3번까지 설치하면 기본적인 사용이 가능하다.
emacs는 .emacs.xmpl 이 샘플 설정파일이고, DOS용은 _emacs 파일로 변환해서 emacs폴더 밑에 저장해두면 설정파일을 인식한다.
본격적으로 emacs를 실행시켜보면 로딩 속도는 vim보다 아주 미세하게 더딘 느낌이다. 그리고
vim은 insert, visual, command, normal, 4가지 편집모드가 있지만,
emacs은 편집모드가 없다.
프로그램을 실행시키지마자 바로 편집 상태로 들어가므로 곧바로 입력하면 된다.
주요 기능은
ctrl alt shift esc 4가지 기능키를 조합해서 사용한다. 특히 esc 키까지도 바인딩 조합으로 들어간다. 그래서 명령어를 취소할때는 esc를 연타로 3번이나 눌러야한다. vim 사용자 입장에서는 이해가 안되겠지만...(물론 ESC말고 명령어 취소 기능으로 ctrl+g 가 있다.)
c-x, m-x 단축키를 사용하게 된다. 기능이 많아서 vim처럼 한동안 메뉴얼 보면서 따라해야한다. 결국 단축키는 익히는 것이 아니라. 단축키를 내 입맛대로 바꿔서 써야한다는 결론이 나온다. 그렇게 우여곡절끝에 단축키 설정도 바꾸고 몇가지 기능을 입맛대로 바꾸면 조금씩 편안하게 느껴진다.
vim에서 중요한것은 esc와 : 라면,
emacs에서는 c-x, m-x다. 덕분에 새끼손가락이 아프다고 호소하는 사람이 있지만 단축키를 바꿀 수 있다. 그래서 capslock을 ctrl과 바꿔서 사용하는 경우가 많지만, 아직 dos에서는 바꾸는법을 알아내지 못했다. 보통 자주 쓰는 기능만 펑션키로 등록해도 큰 불편함은 없을 것이다. 어느정도 설정이 끝난 뒤 화면이다. DOS환경에서 캡처했다.
시작 화면을 없애버렸다. vim에서는 시작화면을 없애는 것이 불가능하다.
맨 밑에는미니버퍼 라고 하는 창이 있다. *message* 버퍼.
*message* 버퍼에는 각종 상태 화면과 기능 메세지가 뜨는 팝업창이다. vim에는 어떤 기능이 실행되어도 밑에 뜨긴 하지만 곧 사라지고 그 메세지로 접근할 방법이 없지만 emacs는 메세지도 별도의 버퍼로 취급하고, 심지어 쉘 상태에서 명령어도 버퍼로 취급해서 글자들을 읽어들여서 손쉽게 저장할 수 있다.
그위는 mode line 일종의 status bar이다. 처음으로 등장하는 *scratch* 버퍼에는말그대로 낙서장 처럼 이것저것 사용할 수 있는 비어있는 버퍼라고 보면되고, mode line에 lisp interaction 이라고 표기 되어있듯이 실제 elisp 코드를 입력하고 ctrl + j누르면 실행되고 결과값도 나온다.
시실 정확하게 말하면 emacs는 LISP 인터프리터에 편집기 기능들이 추가된 모습이다. LISP코드를 바로 실행 해볼 수 있다. 프로그래밍 하듯이 단순하게 계산기로 사용하려면 (+ 1 2) 하고 c-j 누르면 3이 나온다. 인터넷을 뒤져보니 저것이 LISP문법의 끝이라고 한다. 단순한 문법처럼 보이지만 사실 방대한 코드들은 해석이 불가능할 정도인 코드가 많다. lisp언어가 그리 쉽다고는 볼 수 없다. 그럼에도 emacs에서 문제해결을 위한 소스 코드들은 조금 뒤져보면 누군가 만들어서 이리저리 퍼진게 많다. (어떤건 아에 정식으로 emacs 패키지에 포함되기도 한다. ORG모드 같은것들)
vim에서 비해서 마음에 드는 기능중 하나인 dired 라고 하는 디렉토리 탐색기다. emacs에서는 모든 결과나 메세지들이 보통 버퍼(새 창)로 취급되기 때문에 폴더가 이동되면 각 디렉토리를 탐색했던 창이 버퍼로 남아있어서 쉽게 돌아갈 수 있다. 즉 vim e기능이 항상 매번 같은 폴더에서 실행되었다면 emacs의 dired는 동적으로 버퍼가 전환되면서 작업 폴더가 새 버퍼로 전환된다 물론 vim도 cd로 폴더를 바꿀 수 있지만 dired에 비해서는 번거롭다. 흠잡을 것 없이 편리한 dired 모드다.
bookmark 기능을 실행한 화면이다. bookmark 또한 vim에 비해서 편리한 기능 중 하나다.
이것도 하나의 버퍼로 취급하기 때문에 버퍼를 전환하면서 쓸 수 있다. vim에서는 marks를 정해도 a 부터z 까지 단순하게 알파벳으로 취급해서 단축키로 설정하고 접근하기가 편리하지만 이름(주석)을 붙일 수 없어서 불편했는데 emacs는 bookmark에 이름도 넣을 수 있어서 활용성이 높다.
앞에서 소개했듯이 m-x는 확장 기능을 불러오는 기능인데, 하도 명령어가 많아서 tab 과 spacebar 를 이용한 자동완성기능이 지원된다. m-x는 쓰고 싶어도 명령어가 많아서 쓸 때마다 불편하게 느끼는 기능이지만, m-x로 사용할 수 있는 기능은 별도로 단축키를 만들어서 쓸 수 있다. tab을 눌러서 방대한 명령어 중에 뭐가 있나 한번 탐색해 볼 수있다. M-x를 치면 단순하게 메세지 버퍼에 M-x라고만 나오지만 뭘 입력해야 할지 모를때 ? 입력하면 위 처럼 나온다. 각종 명령어는 원하는 기능 즉 lisp 코드를 넣어서 새로운 함수를 만들어서 추가할 수 있고 그 함수에도 마찬가지로 단축키를 지정할 수 있다. 그리고 특정 상황에 동작하게끔 하는 add-hook 이란 기능을 걸 수 있다. vim에서는 event라고 보면된다. 어떤 조건의 상황이 오면 어떤 기능이 작동되는 코드를 삽입할 수 있다. 사실 이 기능이 활용도가 무척 높아서 만족스럽다. 특정 모드에서 예를 들면 txt파일을 열때 wrap 기능을 자동으로 켜거나 끄거나, 단축키도 바꿔 버릴 수 있다. 편집기 안에서 다양한 편집기 환경을 만들 수 있다.
도움말 기능이다. vim :h 라고 보면 되는데, c-h 누르고 ? 누르면 나온다. 모든 설명서가 들어가있다. GNU소개 기능과 함수, 변수, 단축키 목록 등을 볼 수 있다. 워낙 방대하고 특정 mode 에 대한 설명도 첨부되어있어 모든 것을 다 읽고 활용하는 것은 거의 불가능에 가깝다. emacs 에디터의 기본 편집 기능부터 차근차근 읽고 단축키를 실험하면서 익혀야한다.
vim을 이미 익힌 사람이라면 큰 어려움 없이 배울 수 있다.
윈도우 GUI환경에서는 창이 분할되거나 다중창으로 분할되는게 당연하지만 DOS환경같은 CLI 에서는 창을 나눌 수 있다는 것은 무척 편리하고 뛰어난 기능이었다. emacs에서도 당연히 vim 의 vs, vp 모두 쓸 수 있다. 창을 이동하는 기능 또한 단축키로 쉽게 이동 가능하다. 나는 c-x 화살표 left, right 로 tv채널 돌리듯이 이동 할 수 있도록 설정했다. 19.34 버전에 포함된 기능이 아니라 인터넷을 뒤져서 코드를 추가했다. 물론 24.5 버전에서는 기본적으로 가능하다.
아직도 추가 못한 기능도 있다. vim의 set nu 인데 emacs에서는 linum-mode라는 것으로 최신 버전에서는 적용되어 있지만 19.34에 맞는 코드는 아직 못 찾았다. 24.5에서는 linum-mode가 포함되어있으므로 문제가 없다.
emacs는 mode라는 개념이 있다. major, minor 모드가 나뉘어져 있다. 크게보면 프로그래밍 전용 모드, 텍스트 전용 모드, lisp 전용 모드 이런 식이다. 그리고 각각의 minor 모드가 추가적으로 적용 할 수 있다. 그래서 calc도 일종의 minor 기능이다. 문서를 입력하다가 calc 모드를 켜면 달력이 뜨고 검색하는 식이다. 그렇다 보니 mode 자체도 본인이 만들기도 하고 누군가 만든 것을 가져다 쓰기도 한다. major 모드는 일종의 나만의 또다른 편집기 환경이라고 생각하면 된다.
하지만 emacs 의 이런 장점도 DOS버전에서는 유닉스 계열 버전과 다르게 많은 기능이 제약이 있다. 네트워크 환경이 없으면 쓸모 없는 모드 들이 수두룩하다. 하지만 기본 편집기로써는 아무런 문제가 없다.
vim은 가끔씩 밖으로 나가 다른 프로그램을 사용하게 되지만 emacs는 자꾸 emacs 안에서 머물고 싶게 되는 묘한 매력이 있다.