Emacs 내장 기능: 고급 '배터리 포함' 가이드

향상된 탐색 및 파일 처리

find-filedired에서 인터랙티브 와일드카드

사용자는 find-file(C-x C-f)와 dired에서 와일드카드를 인터랙티브하게 사용하여 여러 파일을 열거나 디렉터리 목록을 필터링할 수 있습니다. 예를 들어, find-file에서 *foo*.txt와 같은 와일드카드를 사용하면 일치하는 모든 파일을 동시에 엽니다. Dired에서는 */*_region_*와 같은 와일드카드를 사용해 하위 디렉터리 전체에 걸친 특정 파일들의 맞춤 목록을 만들 수 있으며, 이를 한 번에 표시하고 삭제할 수 있습니다.

ffap-menu를 이용한 버퍼 전체 경로 탐색

M-x ffap이 현재 위치의 파일을 여는 반면, M-x ffap-menu는 버퍼 전체를 스캔하여 파일 경로나 URL처럼 보이는 모든 문자열을 찾습니다. 이는 completing-read 인터페이스를 제공하여 사용자가 현재 문서 내에서 발견된 경로를 필터링하고 열 수 있게 합니다.

사전 툴팁

M-x dictionary-tooltip-mode(및 tooltip-mode)를 활성화하면 마우스를 올렸을 때 툴팁에 단어 의미가 표시됩니다. 이 기능은 로컬 사전이나 위키낱말사전을 활용해 최신 용어와 은어를 찾아볼 수 있습니다.

고급 차이점 및 비교 도구

compare-windows를 이용한 가벼운 비교

M-x compare-windows는 컨텍스트에 구애받지 않는 도구로, 두 창의 커서 위치부터 텍스트를 비교합니다. 첫 번째 불일치를 발견하면 중지하고 보고합니다. Ediff와 달리 텍스트의 출처에 신경 쓰지 않으므로 같은 버퍼의 서로 다른 섹션을 비교하거나 Dired에서 디렉터리 내용 및 파일 속성을 비교할 때 유용합니다.

Dired에서 디렉터리 비교

M-x dired-compare-directories는 두 디렉터리 간 파일 수준 비교를 가능하게 합니다. 이름이 다른 파일을 표시하지만, 파일 속성을 기반으로 한 사용자 정의 매칭 술어도 지원합니다. 예를 들어, 같은 이름이지만 크기가 다른 파일((/= size1 size2))이나 가장 최근에 수정된 버전((> mtime2 mtime1))을 표시할 수 있습니다.

실시간 변경 강조

M-x highlight-changes-mode는 파일에 가해진 변경 사항을 강조합니다. 기본 모드는 활성화된 순간부터 변경을 추적하지만, 훅을 통해 자동화하여 저장되지 않은 변경만 강조하도록 할 수 있습니다:

(defun highlight-changes-mode-turn-off ()
  (and highlight-changes-mode (highlight-changes-mode -1)))

(defun highlight-changes-auto ()
  (when (buffer-file-name)
    (highlight-changes-mode-turn-on)
    (add-hook 'after-save-hook #'highlight-changes-mode-turn-on nil t)
    (add-hook 'before-save-hook #'highlight-changes-mode-turn-off nil t)))

(add-hook 'text-mode-hook #'highlight-changes-auto)

특수 텍스트 조작 및 편집

최신 복제 명령

최근 Emacs 버전에서는 다른 편집기에서 흔히 볼 수 있는 편집 패턴을 반영한 명령을 추가했습니다:

  • copy-from-above-command: 커서 위 첫 번째 비공백 라인에서 텍스트를 복사합니다.
  • duplicate-dwim: 현재 라인이나 활성 영역을 현재 위치 아래에 복사합니다.

히스토리에서 매크로 생성

M-x kmacro-edit-lossage는 사용자가 최근 키 입력 히스토리(“lossage”)에서 키보드 매크로를 만들 수 있게 합니다. 이는 사용자가 일련의 동작을 기록한 뒤, 나중에 그 순서를 반복 가능한 매크로로 변환함으로써 “예측 문제”를 해결합니다.

단어 구문 맞춤화

subword-mode는 CamelCase 기호의 구성 요소를 개별 단어로 취급하고, superword-mode는 snake_case 기호를 하나의 단어로 취급합니다. 또한, 사용자는 주요 모드의 구문 테이블을 수정하여 문자 처리 방식을 바꿀 수 있습니다. 예를 들어, Lisp-data-mode에서 콜론(:)을 단어의 일부로 만들어 backward-kill-word 동작을 개선할 수 있습니다:

(add-hook 'lisp-data-mode-hook
          (lambda () (modify-syntax-entry ?: "w")))

창 및 프레임 관리

scroll-all-mode를 이용한 동기 스크롤링

M-x scroll-all-mode는 현재 프레임의 모든 창을 동시에 스크롤합니다. 이는 공식 Ediff 세션에 들어가지 않고 파일의 두 버전을 나란히 비교할 때 특히 유용합니다.

ruler-mode를 이용한 시각적 여백 제어

M-x ruler-mode는 버퍼 여백과 fill-column을 조정할 수 있는 시각적 인터페이스를 제공합니다. 사용자는 S-<mouse-1>S-<mouse-3>으로 좌우 여백을 설정하고, <mouse-2>를 드래그하여 fill-column을 즉시 조정할 수 있습니다.

프레임 복구

M-x undelete-frame-mode를 활성화하면 최근에 닫힌 프레임을 복구할 수 있습니다. 활성화된 후 M-x undelete-frame은 최대 16개의 최근 삭제된 프레임을 복원하여 작업 공간 레이아웃을 유지합니다.

유틸리티 및 도움말 시스템

apropos 계열

표준 apropos 외에도 Emacs는 apropos-variable, apropos-function, customize-apropos와 같은 특수 조회 명령을 포함합니다. 후자는 검색어와 일치하는 모든 옵션과 얼굴을 포함하는 커스터마이징 버퍼를 생성합니다.

직접 소스 접근

M-x find-function-on-key는 사용자가 키 바인딩에서 해당 함수의 소스 코드로 바로 이동할 수 있게 하여, 먼저 키를 설명하고 소스로 이동하는 과정을 생략합니다.

버퍼 잠금

M-x emacs-lock-mode는 잠금을 수동으로 해제하기 전까지 버퍼가 종료되거나 Emacs가 종료되는 것을 방지합니다. 이는 중요한 임시 데이터를 포함한 파일이 아닌 버퍼를 보호하는 데 유용합니다.

커뮤니티 관점: 발견 가능성 및 안정성

이러한 내장 기능은 강력하지만, Emacs 커뮤니티는 “바닐라” 경험과 큐레이션된 배포 사이에서 의견이 갈립니다. 일부 사용자는 발견 가능성 문제가 신규 사용자에게 가장 큰 장벽이라고 주장하고, 다른 사람들은 안정성이 더 큰 문제라고 제시합니다:

"Emacs 배터리와 관련된 나의 문제는 언제나 패키지 조합 간의 안정성이었습니다... 추가된 어떤 패키지도 무작위이며 겉보기에 관련 없는 패키지를 망가뜨릴 수 있습니다."

"Emacs와 Neovim 모두 rtfm(문서 읽기)과 바닐라 설정에서 시작해 자신만의 커스텀 설정으로 발전하는 것을 보상합니다. 이러한 편집기용 배포형 패키지는 사용자가 초기 학습과 발견 과정을 모두 건너뛰게 합니다."

Sources