문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

Emacs | |
정의 | 자유 소프트웨어 텍스트 편집기 |
개발자 | 리처드 스톨먼 GNU 프로젝트 |
최초 공개 | 1985년 |
주요 용도 | 텍스트 편집 프로그래밍 이메일 뉴스 읽기 아웃라인 기능 캘린더 |
운영 체제 | GNU 리눅스 BSD macOS 윈도우 유닉스 계열 |
프로그래밍 언어 | C Emacs Lisp |
라이선스 | GNU GPLv3 이상 |
상세 정보 | |
확장 언어 | Emacs Lisp |
기원 | TECO 매크로 편집기 |
주요 기능 | 자유로운 커스터마이징 수많은 확장 패키지 강력한 검색 및 교체 버퍼 관리 윈도우 분할 다중 모드 지원 |
파생 버전/포크 | XEmacs Aquamacs Doom Emacs Spacemacs |
관련 소프트웨어 | GNU 프로젝트 Vi |

Emacs는 리처드 스톨먼이 주도하는 GNU 프로젝트의 핵심 소프트웨어 중 하나로, 1985년에 최초로 공개된 자유 소프트웨어 텍스트 편집기이다. 단순한 편집기를 넘어 프로그래밍, 이메일 및 뉴스그룹 읽기, 아웃라인 기능, 캘린더 관리 등 다양한 작업을 수행할 수 있는 통합 컴퓨팅 환경으로 발전했다.
이 소프트웨어는 C 언어와 내장된 Emacs Lisp 언어로 작성되었으며, GNU GPL 버전 3 이상의 조건에 따라 배포된다. 높은 확장성과 커스터마이제이션 가능성이 가장 큰 특징으로, 사용자는 Emacs Lisp을 이용해 편집기의 거의 모든 측면을 수정하거나 새로운 기능을 추가할 수 있다.
Emacs는 GNU 및 리눅스, BSD, macOS, 윈도우를 포함한 대부분의 유닉스 계열 운영 체제에서 실행된다. 수많은 프로그래머와 기술 전문가들이 선호하는 도구로, 특히 소프트웨어 개발 분야에서 강력한 생산성 도구로 자리 잡았다.

Emacs의 역사는 1970년대 중반 MIT 인공지능 연구소에서 시작된다. 당시 TECO 텍스트 편집기에서 동작하는 매크로 집합으로 개발된 초기 버전이 그 기원이다. 이후 다양한 버전이 등장했으며, 1984년 리처드 스톨먼이 GNU 프로젝트의 첫 번째 프로그램으로 GNU Emacs 개발을 시작하면서 결정적인 전환점을 맞았다. 이는 자유 소프트웨어 운동의 상징적인 출발점이 되었다.
GNU Emacs는 1985년에 처음 공개되었으며, C 언어로 작성된 핵심에 Emacs Lisp이라는 확장 언어를 도입했다. 이 설계는 편집기의 거의 모든 기능을 사용자가 Lisp 코드로 재정의하고 확장할 수 있게 함으로써, 단순한 편집기를 넘어 하나의 프로그래밍 플랫폼으로 자리매김하는 계기가 되었다. 초기 버전부터 프로그래밍 지원, 이메일 및 뉴스그룹 읽기 기능을 통합하는 등 운영 체제의 하위 쉘 개념을 지향했다.
시간이 지남에 따라 GNU Emacs는 지속적으로 발전하여 다양한 운영 체제를 지원하게 되었다. 1990년대에는 XEmacs라는 주요 변종이 등장하기도 했으나, 궁극적으로 GNU Emacs가 가장 널리 사용되는 표준이 되었다. 편집기의 라이선스는 GNU GPL을 따르며, 수많은 개발자들에 의해 확장 패키지 생태계가 꾸준히 성장해 왔다. 이로 인해 Emacs는 현대까지도 강력한 생명력을 유지하는 고전적이면서도 진화하는 소프트웨어가 되었다.

Emacs의 텍스트 편집 기능은 그 핵심이며, 단순한 편집을 넘어 프로그래머와 작가에게 강력한 생산성 도구를 제공한다. 기본적인 삽입, 삭제, 복사, 붙여넣기와 같은 기능은 물론, 강력한 정규 표현식을 활용한 검색 및 치환, 구문 강조, 자동 들여쓰기, 괄호 자동 완성 및 짝 맞추기와 같은 고급 기능을 포함한다. 특히 버퍼라는 개념을 통해 여러 파일을 동시에 열어 작업할 수 있으며, 창 분할을 통해 하나의 화면에서 여러 버퍼를 효율적으로 관리할 수 있다.
편집 기능의 큰 특징 중 하나는 명령어의 구성 방식이다. 대부분의 작업은 Emacs Lisp으로 작성된 명령어로 수행되며, 사용자는 단축키를 통해 이 명령어들을 빠르게 호출한다. 예를 들어, 단어, 문장, 문단 단위로 커서를 이동하거나 텍스트를 선택하는 명령어들이 체계적으로 설계되어 있다. 또한, 되돌리기 기능은 트리 구조를 지원하여 여러 분기의 편집 내역을 탐색하고 복원할 수 있게 한다.
텍스트 조작을 위한 다양한 유틸리티 모드도 제공된다. 아웃라인 모드를 이용하면 문서의 구조를 계층적으로 접거나 펼쳐가며 편집할 수 있고, 비교 모드를 통해 두 버퍼의 내용 차이를 시각적으로 확인하고 병합할 수 있다. 스펠 체크, 테이블 생성 및 편집, ASCII 아트 생성과 같은 특수한 작업을 위한 전용 모드들도 풍부하게 준비되어 있다.
이러한 모든 텍스트 편집 기능은 사용자의 필요에 따라 무한히 확장되고 변경될 수 있다. 주 모드는 특정 프로그래밍 언어나 문서 형식에 최적화된 편집 환경을 제공하는 반면, 보조 모드는 자동 완성이나 버전 관리 시스템 연동과 같은 특정 기능을 추가한다. 결국 Emacs의 텍스트 편집은 정적이지 않은, 사용자가 직접 정의하고 성장시켜 나가는 개인 맞춤형 작업 환경의 기초가 된다.
Emacs의 가장 큰 특징 중 하나는 뛰어난 확장성과 사용자 맞춤 설정 능력이다. 이 편집기는 단순한 텍스트 편집기를 넘어, 사용자가 자신의 필요에 맞게 환경을 완전히 재구성할 수 있는 소프트웨어 프레임워크 역할을 한다. 이러한 확장성의 핵심은 Emacs 자체의 대부분이 Emacs Lisp이라는 인터프리터 언어로 작성되어 있으며, 사용자 역시 이 언어를 이용해 기능을 추가하거나 변경할 수 있다는 점이다. 사용자는 설정 파일을 수정하거나 Lisp 코드를 직접 작성하여 키 바인딩, 메뉴, 명령어, 심지어 완전히 새로운 애플리케이션까지 만들어낼 수 있다.
이러한 커스터마이제이션은 주로 init.el 또는 .emacs라는 이름의 사용자 초기화 파일을 통해 이루어진다. 이 파일에서 사용자는 변수 값을 설정하거나, 함수를 정의하거나, 후크를 추가하는 등 다양한 방식으로 Emacs의 동작을 제어한다. 예를 들어, 특정 프로그래밍 모드가 시작될 때 자동으로 코드 서식을 맞추거나, 파일을 열 때 특정 인코딩을 사용하도록 설정할 수 있다. 이러한 깊은 수준의 설정 가능성 덕분에 Emacs는 사용자마다 전혀 다른 모습과 기능을 가진 개인화된 도구로 변모한다.
Emacs의 확장 생태계는 방대한 패키지 아카이브를 통해 뒷받침된다. GNU ELPA 및 MELPA와 같은 공식 및 커뮤니티 패키지 저장소에는 수천 개의 확장 패키지가 등록되어 있어, 사용자는 통합 개발 환경 기능, 이메일 클라이언트, 캘린더, 게임에 이르기까지 다양한 기능을 쉽게 설치하고 통합할 수 있다. 이는 Emacs를 텍스트 편집 이상의 생산성 플랫폼으로 만드는 결정적 요소이다.
결국 Emacs는 "편집하는 코드 그 자체"라는 철학을 구현한다. 사용자는 단지 편집기를 사용하는 것이 아니라, 자신의 작업 흐름에 꼭 맞도록 편집기라는 소프트웨어를 계속해서 재구성하고 진화시킨다. 이 무한한 확장성과 개인화 가능성이 Emacs를 수십 년 동안 강력한 생명력을 유지하게 한 원동력이다.
Emacs의 패키지 관리 시스템은 사용자가 편집기의 기능을 쉽게 확장하고 관리할 수 있도록 설계되었다. 초기에는 사용자가 직접 소스 코드를 다운로드하여 설치하고 설정 파일을 수정해야 했지만, 현대의 Emacs는 통합된 패키지 관리자를 내장하고 있다. 이를 통해 광범위한 Emacs Lisp으로 작성된 확장 기능들을 중앙 저장소에서 검색, 설치, 업데이트 및 삭제할 수 있다.
주요 패키지 관리 도구로는 package.el이 있으며, 이는 GNU Emacs에 기본으로 포함되어 있다. 사용자는 M-x list-packages 명령어를 통해 사용 가능한 패키지 목록을 브라우징할 수 있다. 이 인터페이스에서는 패키지 설명을 확인하고, 원하는 패키지를 선택하여 설치할 수 있다. 패키지 저장소는 기본적으로 GNU ELPA를 사용하며, 사용자는 MELPA나 Marmalade와 같은 타사 저장소를 추가로 설정하여 더 다양한 패키지에 접근할 수 있다.
패키지 관리의 핵심은 의존성 해결과 자동 업데이트 기능이다. 패키지를 설치할 때 필요한 다른 패키지(의존성)가 있다면 관리자가 자동으로 함께 설치한다. 또한 정기적으로 패키지 목록을 새로 고치고, 사용자에게 업데이트 가능한 패키지가 있는지 알려주어 편집기의 기능을 최신 상태로 유지하도록 돕는다. 이러한 시스템은 Emacs의 강력한 확장성과 커스터마이제이션을 실현하는 데 중요한 기반이 된다.
더 나아가, use-package와 같은 선언적 설정 매크로는 패키지 관리와 설정을 한 단계 더 효율적으로 만든다. 이 도구를 사용하면 초기화 파일에 간결한 선언문을 작성하여 패키지의 설치, 로드, 키 바인딩 설정 등을 통합적으로 관리할 수 있다. 이는 특히 많은 수의 패키지를 사용하는 사용자에게 설정 파일의 가독성과 유지 보수성을 크게 향상시킨다.

주 모드는 Emacs에서 현재 편집 중인 버퍼의 주요 콘텐츠 유형에 맞춰 동작을 조정하는 메이저 편집 모드이다. 주 모드는 파일 확장자나 파일 내용을 기반으로 자동으로 로드되며, 사용자가 수동으로 전환할 수도 있다. 각 주 모드는 특정 프로그래밍 언어, 마크업 언어, 또는 문서 형식에 최적화된 편집 기능을 제공한다. 예를 들어, C 언어를 편집할 때는 c-mode가, 파이썬 코드를 편집할 때는 python-mode가 활성화되어 해당 언어의 구문 강조, 들여쓰기 규칙, 코드 탐색 기능 등을 지원한다.
주 모드는 텍스트 편집의 기본 동작을 정의한다. 이는 구문 강조, 자동 들여쓰기, 주석 처리, 코드 블록 접기, 언어별 명령어 완성 등의 기능을 포함한다. 또한, 특정 언어에 맞는 디버깅 도구나 컴파일 명령을 실행하는 기능과 통합되기도 한다. HTML이나 LaTeX와 같은 마크업 언어를 위한 모드는 구조적 편집을 돕는 특수 명령어를 제공한다. 이러한 모드들은 Emacs Lisp으로 작성되어 있어 사용자가 필요에 따라 기능을 수정하거나 확장하는 것이 가능하다.
주 모드는 보조 모드와 함께 사용된다. 보조 모드는 여러 주 모드에서 공통적으로 사용할 수 있는 보조적 기능을 제공하는 반면, 주 모드는 버퍼의 기본 편집 환경을 지배한다. 따라서 하나의 버퍼에는 정확히 하나의 주 모드만 활성화될 수 있다. Emacs 커뮤니티는 수많은 프로그래밍 언어와 파일 형식을 위한 주 모드를 개발해 왔으며, 이를 통해 Emacs는 단순한 텍스트 편집기를 넘어 통합 개발 환경의 역할까지 수행할 수 있게 되었다.
보조 모드는 주 모드와 함께 동시에 활성화되어 특정한 편집 보조 기능을 제공한다. 주 모드가 문서의 주요 유형(예: 프로그래밍 언어나 마크업 언어)에 대한 기본적인 편집 환경을 설정한다면, 보조 모드는 들여쓰기, 구문 강조, 버전 관리, 자동 완성 등 특정 작업을 보조하는 기능을 추가한다. 하나의 주 모드에 여러 개의 보조 모드를 결합하여 사용자의 작업 흐름을 최적화할 수 있다.
대표적인 보조 모드로는 들여쓰기를 자동으로 관리하는 auto-indent-mode, 프로그래밍 시 구문을 색상으로 구분하여 표시하는 font-lock-mode(일반적으로 구문 강조), 버전 관리 시스템 Git과 연동하는 magit-mode 등이 있다. 또한 자동 완성을 지원하는 company-mode, 괄호의 짝을 맞추고 강조하는 paren-mode 또는 show-paren-mode, 여러 파일을 동시에 편집할 때 유용한 ibuffer-mode 등 매우 다양하다.
사용자는 필요에 따라 보조 모드를 자유롭게 켜고 끌 수 있으며, 초기화 파일을 통해 특정 주 모드가 로드될 때 자동으로 특정 보조 모드도 함께 활성화되도록 설정하는 것이 일반적이다. 이러한 모듈식 설계는 사용자가 자신에게 꼭 필요한 기능들만 조합하여 가볍고 효율적인 편집 환경을 구성할 수 있게 해준다.

Emacs Lisp는 Emacs의 핵심을 이루는 스크립트 언어이자 프로그래밍 언어이다. 이 언어는 Emacs의 거의 모든 기능을 구현하는 데 사용되며, 사용자가 편집기의 동작을 자유롭게 변경하고 확장할 수 있는 기반을 제공한다. Emacs Lisp는 리스프 계열의 언어로, 인터프리터 방식으로 동작하며, 동적 타입과 가비지 컬렉션을 지원한다. Emacs 자체의 많은 부분이 C로 작성된 코어 위에서 Emacs Lisp로 구현되어 있어, Emacs는 사실상 "Emacs Lisp 인터프리터를 내장한 프로그램"으로 볼 수 있다.
Emacs Lisp의 가장 큰 강점은 Emacs의 확장성과 커스터마이제이션을 가능하게 한다는 점이다. 사용자는 초기화 파일에 간단한 Emacs Lisp 코드를 작성하여 기본적인 설정을 변경할 수 있으며, 더 복잡한 기능을 추가하기 위해 패키지를 설치하거나 직접 함수와 모드를 작성할 수 있다. 이러한 패키지와 확장 기능들은 대부분 순수한 Emacs Lisp로 작성되어 있으며, 패키지 아카이브를 통해 쉽게 공유되고 설치된다. 이로 인해 Emacs는 단순한 텍스트 편집기를 넘어 통합 개발 환경, 이메일 클라이언트, 문서 뷰어 등 다양한 용도로 변모할 수 있다.
Emacs Lisp 코드는 주로 버퍼와 텍스트를 조작하는 데 초점을 맞춘다. 언어는 버퍼 내의 위치를 나타내는 포인트와 마크 개념을 다루기 위한 풍부한 함수 라이브러리를 제공한다. 또한, 주 모드와 보조 모드를 정의하여 특정 종류의 텍스트나 작업에 최적화된 편집 환경을 만들 수 있게 한다. 이러한 모드들은 대부분 Emacs Lisp로 작성되며, 신택스 하이라이팅, 자동 들여쓰기, 코드 완성과 같은 고급 기능을 구현한다.
Emacs Lisp로 작성된 코드는 바이트 코드로 컴파일되어 성능을 향상시킬 수 있다. 사용자는 대화형으로 REPL 환경에서 코드를 평가하고 실험할 수 있으며, 내장된 디버거를 사용하여 프로그램을 단계별로 실행하고 문제를 진단할 수 있다. 이러한 도구들과 함께 포괄적인 표준 라이브러리는 Emacs Lisp를 단순한 설정 언어가 아닌 본격적인 애플리케이션 개발 언어로 자리매김하게 했다. 결과적으로, Emacs 생태계의 번영은 그 기반이 되는 Emacs Lisp의 강력함과 유연성에 크게 의존하고 있다.

GNU Emacs는 GNU 프로젝트의 핵심 구성 요소 중 하나로, 리처드 스톨먼이 개발한 자유 소프트웨어 텍스트 편집기이다. 1985년에 최초로 공개되었으며, 이후 지속적으로 개발되어 가장 대표적인 Emacs 구현체가 되었다. GNU Emacs는 C 언어와 Emacs Lisp으로 작성되었으며, GNU GPL 라이선스 하에 배포된다. 이 편집기는 GNU 및 리눅스를 비롯한 BSD, macOS, 윈도우 등 다양한 운영 체제에서 동작한다.
GNU Emacs는 단순한 텍스트 편집을 넘어 프로그래밍, 이메일 및 뉴스그룹 읽기, 아웃라인 기능, 캘린더 관리 등 다양한 작업을 수행할 수 있는 통합 환경을 제공한다. 이러한 확장성은 내장된 Emacs Lisp 인터프리터와 풍부한 라이브러리를 통해 실현된다. 사용자는 Emacs Lisp을 사용하여 편집기의 동작을 자유롭게 수정하거나 새로운 기능을 추가할 수 있다.
GNU Emacs의 개발은 공개적이고 커뮤니티 중심으로 이루어지며, 공식 저장소를 통해 소스 코드가 관리된다. 이는 자유 소프트웨어 재단이 추구하는 소프트웨어의 자유, 즉 사용, 연구, 공유, 수정의 권리를 실천하는 대표적인 사례이다. 수많은 개발자와 사용자들이 기여하는 활발한 생태계를 가지고 있어 지속적인 기능 개선과 버그 수정이 이루어지고 있다.
GNU Emacs는 XEmacs와 같은 다른 주요 변종과 비교될 때, GNU 프로젝트와의 긴밀한 통합, 공식적인 개발 로드맵, 그리고 보수적인 안정성 유지 정책을 특징으로 한다. 수십 년에 걸친 개발 역사를 바탕으로 매우 안정적이고 성숙한 소프트웨어로 평가받으며, 프로그래머와 기술 작성을 비롯한 다양한 분야의 전문가들에게 널리 사용되고 있다.
XEmacs는 GNU Emacs 코드베이스를 기반으로 한 자유 소프트웨어 텍스트 편집기이다. 1990년대 초, 당시 GNU Emacs의 주 개발 버전이었던 Emacs 19의 개발 지연과 기술적 방향에 대한 논란 속에서 Lucid사의 엔지니어들이 Lucid Emacs라는 이름으로 포크하여 개발을 시작했다. 이 프로젝트는 나중에 XEmacs로 이름이 변경되었다. XEmacs는 초기에는 더 빠른 개발 주기와 GUI 툴킷 지원, 향상된 국제화 기능 등을 내세우며 GNU Emacs와 경쟁하는 주요 변종으로 자리 잡았다.
XEmacs의 가장 두드러진 특징 중 하나는 네이티브 GUI 툴킷 지원에 대한 초기 집중이었다. GNU Emacs가 자체적인 위젯을 사용하는 반면, XEmacs는 Motif나 GTK+와 같은 외부 툴킷을 활용하여 더 네이티브한 모양과 느낌을 제공하려 했다. 또한 유니코드 지원을 포함한 국제화 기능도 일찍부터 도입하는 등 기술적으로 진보적인 시도를 많이 했다. 핵심 편집 엔진과 Emacs Lisp 인터프리터는 GNU Emacs와 거의 동일하므로, 대부분의 확장 패키지와 설정 파일은 두 편집기 사이에서 호환된다.
그러나 2000년대 중반 이후 GNU Emacs 개발이 활발해지며 많은 기능 격차가 해소되었고, XEmacs의 독자적인 개발 속도는 크게 느려졌다. 꾸준한 유지보수는 이루어지고 있지만, GNU Emacs에 비해 활발한 신기능 추가나 사용자 기반은 상대적으로 축소된 상태이다. 오늘날 XEmacs는 주로 역사적 중요성과 특정 기능을 선호하는 소수의 사용자들에 의해 사용되며, Emacs 생태계 내에서 하나의 주요 변종으로 기록되고 있다.

Emacs의 단축키 체계는 커맨드 중심의 접근 방식을 특징으로 한다. 대부분의 편집 명령은 컨트롤 키나 메타 키와 같은 수정 키를 조합하여 실행된다. 이 체계는 사용자가 키보드에서 손을 떼지 않고도 광범위한 기능을 빠르게 호출할 수 있도록 설계되었다. 전통적으로 컨트롤 키는 기본적인 편집 명령에, 메타 키는 더 복잡하거나 문맥 의존적인 명령에 할당되는 경향이 있다.
Emacs의 단축키는 계층적이고 일관된 네이밍 규칙을 따른다. 예를 들어, 파일 관련 명령은 대부분 C-x로 시작하며, C-x C-s는 저장, C-x C-f는 파일 열기이다. 버퍼 관련 명령은 C-x로, 도움말 명령은 C-h로 시작하는 식이다. 이러한 체계는 학습 곡선이 존재하지만, 일단 익히면 매우 효율적인 작업 흐름을 가능하게 한다. 또한 모든 단축키는 사용자가 재정의하거나 새로운 명령에 바인딩할 수 있어 확장성을 극대화한다.
Emacs는 접두 명령어라는 개념을 사용하여 단축키 공간을 효율적으로 조직한다. 하나의 키 시퀀스가 여러 하위 명령의 진입점 역할을 한다. 예를 들어, C-x는 하나의 접두 명령어로, 이후에 입력되는 키에 따라 다양한 파일 또는 버퍼 작업으로 분기된다. 이는 제한된 키 조합으로 수천 개의 명령을 체계적으로 관리할 수 있게 해준다.
사용자는 이모션이나 키보드 매크로를 통해 자주 사용하는 명령 시퀀스를 기록하고 재생할 수 있으며, Emacs Lisp을 통해 완전히 새로운 키 바인딩을 정의할 수 있다. 이러한 유연성 때문에 Emacs의 단축키 환경은 사용자마다 크게 달라질 수 있다. 많은 고급 사용자는 에이스 윈도우나 헬름 같은 서드파티 패키지를 통해 단축키 체계를 더욱 발전시키기도 한다.

Emacs의 가장 큰 장점은 그 극단적인 확장성과 커스터마이제이션 가능성이다. Emacs Lisp이라는 강력한 스크립트 언어를 기반으로 하여, 사용자는 단순한 텍스트 편집을 넘어 이메일 클라이언트, 뉴스그룹 리더, 통합 개발 환경, 캘린더, 심지어 게임까지 편집기 내에서 구현할 수 있다. 이러한 '모든 것을 하는 환경'이라는 철학은 사용자가 하나의 프로그램에서 다양한 작업을 통합적으로 처리할 수 있게 해주며, 수많은 오픈 소스 개발자들이 만든 방대한 패키지 생태계가 이를 뒷받침한다. 또한, 키보드 중심의 효율적인 작업 흐름을 구성할 수 있어, 숙련된 사용자에게는 매우 생산적인 도구가 된다.
반면, 이러한 강력함은 높은 학습 곡선이라는 단점으로 이어진다. 초보자에게는 복잡한 단축키 체계와 Lisp을 이용한 설정 방식이 진입 장벽으로 작용한다. 기본적인 편집 기능을 사용하기 위해서도 상당한 시간을 투자해 학습해야 하며, 자신에게 맞는 환경을 구축하는 데 더 많은 노력이 필요하다. 이는 마우스와 그래픽 메뉴에 익숙한 일반 사용자나 가벼운 편집기를 선호하는 사용자에게는 부담스러울 수 있다.
또 다른 단점은 상대적으로 무거운 자원 사용량이다. Vim이나 나노 같은 최소주의적 편집기에 비해 메모리 점유율이 높고 시작 속도가 느린 편이다. 수많은 패키지를 로드하고 복잡한 기능을 실행하는 환경에서는 이 현상이 더 두드러진다. 따라서 간단한 파일 수정이나 시스템 관리 작업에는 과도할 수 있으며, 제한된 시스템 자원을 가진 환경에서는 적합하지 않을 수 있다.

Emacs와 Vi/Vim은 모두 역사가 깊은 강력한 텍스트 편집기이자 자유 소프트웨어로, 특히 유닉스 계열 시스템에서 프로그래머들 사이에 널리 사용된다. 두 편집기의 가장 근본적인 차이는 사용자 인터페이스 철학에 있다. Emacs는 모달리스(Modaless) 방식을 채택하여 일반적으로 편집 키 입력과 명령 키 입력이 구분되지 않고, Ctrl 및 Meta(보통 Alt 키) 키와의 조합으로 다양한 기능을 수행한다. 반면 Vi/Vim은 모달(Modal) 방식을 특징으로 하여, 명령 모드, 입력 모드, 비주얼 모드 등 여러 모드 간 전환이 필수적이며, 초기 학습 곡선이 더 가파르다는 평가를 받는다.
확장성과 커스터마이제이션 측면에서 Emacs는 Emacs Lisp이라는 자체 프로그래밍 언어를 내장하여 편집기의 거의 모든 부분을 사용자가 재정의하거나 확장할 수 있도록 설계되었다. 이로 인해 Emacs는 단순한 편집기를 넘어 통합 개발 환경(IDE), 이메일 클라이언트, 뉴스 리더, 심지어 게임까지 실행할 수 있는 플랫폼으로 진화했다. Vim은 Vimscript라는 자체 스크립트 언어를 가지고 확장이 가능하지만, 그 범위와 철학적 접근은 Emacs에 비해 더 편집기 중심에 머무는 경향이 있다.
실행 속도와 자원 사용량에서는 일반적으로 Vim이 더 가볍고 빠르게 시작되는 것으로 알려져 있다. Emacs는 기능이 풍부한 대신 상대적으로 더 많은 메모리를 사용하며, 특히 수많은 패키지를 로드한 상태에서는 시작 시간이 더 길 수 있다. 이 차이는 제한된 시스템 자원 환경이나 빠른 파일 열기와 간단한 편집이 주 업무인 사용자에게 중요한 고려 사항이 된다. 결국 두 편집기 간의 선택은 사용자의 작업 흐름, 확장 기능에 대한 요구, 그리고 인터페이스에 대한 선호도에 크게 의존한다.
