Emacs 31 릴리스 프리뷰: Tree‑sitter 자동화, Markdown‑ts, 그리고 핵심 개선 사항
Emacs 31은 최신 편집 경험에 필요한 "접착 코드"와 외부 패키지의 양을 줄이고, 많이 요청된 기능들을 코어에 흡수하는 데 초점을 맞추었습니다. 가장 큰 변화는 tree‑sitter 문법 자동화, 네이티브 Markdown tree‑sitter 모드 도입, 그리고 xref 버퍼를 인라인으로 편집할 수 있게 된 점입니다.
자동화된 Tree‑sitter 통합
Emacs 31은 *-ts-mode 변형을 사용하기 위해 필요한 수동 설정을 크게 줄였습니다. 이전에는 사용자가 직접 treesit-language-source-alist를 채우고 treesit-install-language-grammar를 호출해야 했으며, 로컬 툴체인이 컴파일을 위해 올바르게 구성되어 있는지 확인해야 했습니다.
두 개의 새로운 설정이 이 과정을 간소화합니다:
treesit-enabled-modes:t로 설정하면 사용 가능한 경우 자동으로 메이저 모드를 해당 tree‑sitter 변형으로 전환합니다.treesit-auto-install-grammar: 오류를 반환하는 대신 누락된 문법을 자동으로 가져오고 빌드하도록 Emacs가 제안할 수 있게 합니다.
아키텍처에 관한 참고: 자동 설치된 문법은 아키텍처별로 구분되지 않습니다. 설정 디렉터리를 서로 다른 아키텍처(예: x86_64와 arm64)에서 공유하는 경우, 한 머신에서 빌드된 바이너리는 동일한 파일 이름 아래에 저장되기 때문에 다른 머신에서는 로드되지 않습니다.
실험적 markdown-ts-mode
Emacs 31은 단순 구문 강조를 넘어 보다 통합된 글쓰기 경험을 제공하는 실험적 markdown-ts-mode를 도입합니다. 실험 단계이므로 아직 auto-mode-alist에 연결되지 않았으며, 사용자는 M-x load-library로 수동 로드하거나 직접 auto-mode-alist에 추가해야 합니다.
주요 기능은 다음과 같습니다:
- Org‑like 네비게이션: 헤딩 이동, 섹션 접기, 구조 요소 간 이동을 위한 키바인딩이 Org‑mode 사용자에게 익숙하도록 설계되었습니다.
- 실시간 코드 블록: fenced 코드 블록은 해당 언어의 실제 메이저 모드로 폰트화됩니다(예:
elisp블록은 진짜 Emacs Lisp 폰트락을 사용). 대상 언어에 대한 편집 명령도 대부분 이 블록 안에서 동작합니다. - 인라인 이미지 렌더링: 이미지 링크가 버퍼 안에 직접 렌더링되어, 문서가 경로 목록에서 시각적인 문서로 변환됩니다.
Eglot 및 LSP 개선
Emacs 31의 Eglot은 이제 내부 markdown-ts-mode를 활용해 LSP 문서를 렌더링할 수 있습니다. markdown-ts-view-mode를 사용하면 외부 패키지 없이도 포맷된 hover 문서를 볼 수 있습니다.
또한 eglot-events-buffer-size는 eglot-events-buffer-config로 교체되어 이벤트 로깅에 대한 제어가 향상되었습니다.
편집 가능한 Xref 버퍼
가장 큰 워크플로우 개선 중 하나는 xref-edit-mode의 도입입니다. 이전에는 xref 버퍼가 xref-query-replace-in-results를 통한 정규식 기반 교체만 지원했으며, 개별 라인 편집을 위해서는 결과를 grep 버퍼로 내보내야 했습니다.
xref-edit-mode를 사용하면 이제 xref 결과를 인라인으로 편집할 수 있습니다. 검색을 실행한 뒤(예: C-x p g), e를 눌러 편집 모드에 들어가고, 변경 사항은 C-c C-c로 확정합니다.
창 관리 및 UI 개선
Emacs 31은 창을 분할하거나 종료하지 않고도 레이아웃을 재배열할 수 있는 여러 새로운 명령을 도입했습니다:
- Transpose: 가로와 세로 배치를 서로 교환합니다.
- Rotate: 전체 레이아웃을 회전합니다.
- Flip: 레이아웃을 좌우 또는 상하로 뒤집습니다.
다른 UI 업데이트는 다음과 같습니다:
- Side‑window Speedbar:
speedbar-window가 이제 별도 플로팅 프레임이 아니라 적절한 사이드 창에 위치합니다. - Eager Completion:
completion-eager-update와completion-eager-display가 사용자가 입력할 때마다 자동 완성 UI를 새로 고칩니다.minibuffer-visible-completions를'up-down으로 설정하면 화살표 키로 후보를 탐색할 수 있습니다. - Icomplete 업데이트: 패치(버그#75784)로
icomplete-mode에 수직 인‑버퍼 동작과 접두사 표시기가 추가되었습니다.
버전 관리 및 ERC 업데이트
- VC 개선:
vc-dir-auto-hide-up-to-date는vc-dir새로 고침 시 최신 상태인 파일을 자동으로 숨깁니다. 또한vc-allow-rewriting-published-history는 강제 푸시나 히스토리 재작성(예: Jujutsu 사용) 워크플로우를 지원합니다. - ERC 정리: 새로운 설정으로 ERC가 새로 연 대상 버퍼에만 이전 로그를 삽입하도록 보장합니다.
scrolltobottom모듈이erc-fill-wrap에 의존하지 않게 되어, 오래된 버전 사용자의 설정이 단순해졌습니다.
품질 향상 및 테마
- 터미널 에뮬레이션:
term과ansi-term에서 라인이 "삼켜지"거나 재그리기 시 깨지는 오래된 버그가 수정되어htop같은 curses 기반 프로그램을 사용할 수 있게 되었습니다. - Kill Region:
kill-region-dwim을'emacs-word로 설정하면 영역이 선택되지 않았을 때C-w가 뒤쪽 단어를 삭제하도록 하여 "mark is not active" 오류를 방지합니다. - Lossage View:
view-lossage-auto-refresh가C-h l을 최근 키 입력을 실시간으로 보는 뷰로 만듭니다. - Modus 테마: 이제 Emacs는 여러 Modus 테마를 제공하며, 색맹(디유테라노피아, 트리타노피아) 최적화 버전과 밝은 배경(
modus-operandi) 및 어두운 배경(modus-vivendi)용 "틴트" 변형을 포함합니다.
커뮤니티 시각
커뮤니티의 사용자와 개발자는 Tree‑sitter 통합이 프로젝트에 활력을 불어넣었으며, 별도 언어 모드에서 일반적으로 유용한 도구로 전환되었다고 강조합니다. 일부 사용자는 Emacs의 초고도 설정 가능성이 현대 LLM 에이전트와 특히 잘 맞는다고 언급합니다. LLM은 복잡한 init.el 파일을 유지·관리하는 데 큰 도움이 될 수 있습니다.
"텍스트 파일을 통해 초고도 설정 가능한 Emacs와 같은 시스템은 현대 LLM에 딱 맞는다... 에이전트는 .emacs/init.el을 설정하고 유지하는 데 정말 뛰어나다."
다른 사람들은 학습 곡선이 여전히 가파르지만, "바로 사용 가능한" 기능으로의 전환이 이전에 Doom이나 Spacemacs 같은 무거운 배포판에 의존하던 신규 사용자들의 진입 장벽을 낮춘다고 강조합니다.
요약: Emacs 31은 자동 tree‑sitter 문법 설치, 실험적 내장 markdown‑ts‑mode, 그리고 편집 가능한 xref 버퍼 등 중요한 품질 향상 기능을 도입합니다.
제목: Emacs 31 릴리스 프리뷰: Tree‑sitter 자동화, Markdown‑ts, 그리고 핵심 개선 사항