# Emacs 빠른 참조

*탐색, 편집, 버퍼, 검색, org mode, 패키지*

> Source: GNU Emacs Manual (gnu.org/software/emacs) · MIT

## 탐색

### 커서 이동

| Command | Description |
|---------|-------------|
| `C-f / C-b` | 앞/뒤로 한 문자 |
| `M-f / M-b` | 앞/뒤로 한 단어 |
| `C-n / C-p` | 다음 / 이전 줄 |
| `C-a / C-e` | 줄 시작 / 끝 |
| `M-a / M-e` | 문장 시작 / 끝 |
| `C-v / M-v` | 한 페이지 아래 / 위로 스크롤 |
| `M-< / M->` | 버퍼 시작 / 끝 |
| `M-g g` | 줄 번호로 이동 |

### 화면 위치 조정

| Command | Description |
|---------|-------------|
| `C-l` | 화면 재중앙 (상단/중앙/하단 순환) |
| `C-M-l` | 휴리스틱 방식으로 창 재배치 |

## 편집

### Kill & Yank (잘라내기 & 붙여넣기)

| Command | Description |
|---------|-------------|
| `C-k` | 줄 끝까지 Kill |
| `C-w` | 영역 Kill (잘라내기) |
| `M-w` | 영역 복사 |
| `C-y` | Yank (붙여넣기) |
| `M-y` | Yank 후 Kill 링 순환 |
| `C-d` | 앞 문자 삭제 |
| `M-d` | 앞 단어 Kill |
| `M-DEL` | 뒤 단어 Kill |

### 실행 취소 & 전치

| Command | Description |
|---------|-------------|
| `C-/ or C-_` | 실행 취소 |
| `C-g C-/` | 다시 실행 (취소 되돌리기) |
| `C-t` | 문자 전치 |
| `M-t` | 단어 전치 |
| `C-x C-t` | 줄 전치 |

### 선택

| Command | Description |
|---------|-------------|
| `C-SPC` | 마크 설정 (선택 시작) |
| `C-x h` | 버퍼 전체 선택 |
| `M-h` | 단락 선택 |
| `C-x C-x` | 포인트와 마크 교환 |

## 버퍼 & 창

### 버퍼

| Command | Description |
|---------|-------------|
| `C-x b` | 버퍼 전환 |
| `C-x C-b` | 모든 버퍼 목록 |
| `C-x k` | 버퍼 닫기 |
| `C-x LEFT / RIGHT` | 이전 / 다음 버퍼 |

### 창

| Command | Description |
|---------|-------------|
| `C-x 2` | 창 가로 분할 |
| `C-x 3` | 창 세로 분할 |
| `C-x 0` | 현재 창 닫기 |
| `C-x 1` | 다른 창 모두 닫기 |
| `C-x o` | 다른 창으로 전환 |
| `C-x ^` | 창 세로 확장 |
| `C-x {` | 창 가로 축소 |

### 프레임

| Command | Description |
|---------|-------------|
| `C-x 5 2` | 새 프레임 생성 |
| `C-x 5 0` | 현재 프레임 삭제 |
| `C-x 5 o` | 다른 프레임으로 전환 |

## 검색 & 치환

### 증분 검색

| Command | Description |
|---------|-------------|
| `C-s` | 앞으로 검색 (증분) |
| `C-r` | 뒤로 검색 (증분) |
| `C-s C-s` | 마지막 검색 앞으로 반복 |
| `C-M-s` | 정규식 앞으로 검색 |
| `C-M-r` | 정규식 뒤로 검색 |
| `RET` | 현재 위치에서 검색 종료 |
| `C-g` | 검색 취소, 시작 위치로 복귀 |

### 치환

| Command | Description |
|---------|-------------|
| `M-%` | 쿼리 치환 |
| `C-M-%` | 정규식 쿼리 치환 |
| `y` | 현재 일치 치환 |
| `n` | 현재 일치 건너뛰기 |
| `!` | 나머지 모두 치환 |
| `q` | 치환 종료 |

## 파일

### 파일 작업

| Command | Description |
|---------|-------------|
| `C-x C-f` | 파일 찾기 (열기) |
| `C-x C-s` | 현재 버퍼 저장 |
| `C-x C-w` | 다른 이름으로 저장 |
| `C-x s` | 수정된 모든 버퍼 저장 |
| `C-x C-r` | 읽기 전용으로 파일 열기 |
| `C-x i` | 포인트에 파일 내용 삽입 |

### Dired (디렉터리 편집기)

| Command | Description |
|---------|-------------|
| `C-x d` | Dired로 디렉터리 열기 |
| `d / x` | 삭제 플래그 / 삭제 실행 |
| `R` | 파일 이름 변경 / 이동 |
| `C` | 파일 복사 |
| `+` | 디렉터리 생성 |
| `g` | 목록 새로고침 |

## 모드

### 주 모드

| Command | Description |
|---------|-------------|
| `M-x fundamental-mode` | 일반 텍스트 편집 |
| `M-x text-mode` | 채우기 및 맞춤법 포함 텍스트 |
| `M-x prog-mode` | 프로그래밍 모드 기반 |
| `M-x python-mode` | Python 편집 및 들여쓰기 |
| `M-x shell-mode` | 버퍼 내 대화형 셸 |

### 유용한 보조 모드

| Command | Description |
|---------|-------------|
| `M-x display-line-numbers-mode` | 줄 번호 토글 |
| `M-x auto-fill-mode` | 채우기 열에서 자동 줄 바꿈 |
| `M-x flyspell-mode` | 실시간 맞춤법 검사 |
| `M-x column-number-mode` | 모드 줄에 열 번호 표시 |
| `M-x whitespace-mode` | 공백 시각화 |
| `M-x electric-pair-mode` | 괄호 및 따옴표 자동 닫기 |

## Org Mode 기본

### 구조

| Command | Description |
|---------|-------------|
| `* / ** / ***` | 제목 레벨 1 / 2 / 3 |
| `TAB` | 제목 가시성 순환 |
| `S-TAB` | 전체 가시성 순환 |
| `M-RET` | 같은 레벨 제목 삽입 |
| `M-LEFT / M-RIGHT` | 제목 레벨 올리기 / 내리기 |
| `M-UP / M-DOWN` | 서브트리 위 / 아래로 이동 |

### TODO & 체크박스

| Command | Description |
|---------|-------------|
| `C-c C-t` | TODO 상태 순환 |
| `C-c C-d` | 마감 기한 설정 |
| `C-c C-s` | 일정 예약 |
| `C-c C-c` | 체크박스 [ ] / [X] 토글 |
| `C-c a` | 일정 뷰 열기 |

### 링크 & 내보내기

| Command | Description |
|---------|-------------|
| `C-c C-l` | 링크 삽입 / 편집 |
| `C-c C-o` | 포인트의 링크 열기 |
| `C-c C-e` | 내보내기 디스패처 (HTML, PDF 등) |

## 패키지 관리

### package.el

| Command | Description |
|---------|-------------|
| `M-x list-packages` | 사용 가능한 패키지 탐색 |
| `i / d / x` | 설치 / 삭제 표시 / 실행 |
| `U` | 업그레이드 가능한 모두 표시 |
| `M-x package-refresh-contents` | 패키지 목록 새로고침 |

### use-package (init.el)

```
(use-package magit
  :ensure t
  :bind ("C-x g" . magit-status))
(use-package company
  :ensure t
  :hook (prog-mode . company-mode))
```

## 설정

### 주요 설정 파일

| Command | Description |
|---------|-------------|
| `~/.emacs.d/init.el` | 메인 설정 파일 |
| `~/.emacs.d/early-init.el` | 초기 초기화 (GUI 이전, Emacs 27+) |
| `~/.emacs.d/custom.el` | Customize로 작성된 설정 |

### 공통 설정

```
(setq inhibit-startup-screen t)
(tool-bar-mode -1)
(set-face-attribute 'default nil :height 120)
(global-display-line-numbers-mode 1)
(setq make-backup-files nil)
```

### 도움말 시스템

| Command | Description |
|---------|-------------|
| `C-h k` | 키 바인딩 설명 |
| `C-h f` | 함수 설명 |
| `C-h v` | 변수 설명 |
| `C-h m` | 현재 모드 설명 |
| `C-h t` | Emacs 튜토리얼 열기 |
| `C-h i` | Info 문서 열기 |

## 일반 패턴

### 사각형 편집

| Command | Description |
|---------|-------------|
| `C-x SPC` | 사각형 마크 모드 시작 |
| `C-x r k` | 사각형 Kill |
| `C-x r y` | 사각형 Yank |
| `C-x r t` | 사각형을 문자열로 치환 |
| `C-x r o` | 빈 사각형 삽입 |

### 매크로

| Command | Description |
|---------|-------------|
| `C-x (` | 매크로 녹화 시작 |
| `C-x )` | 매크로 녹화 중지 |
| `C-x e` | 마지막 매크로 실행 |
| `C-u 10 C-x e` | 매크로 10회 실행 |
| `M-x name-last-kbd-macro` | 재사용을 위한 매크로 이름 지정 |

### 셸 & 평가

| Command | Description |
|---------|-------------|
| `M-x shell` | 버퍼 내 셸 열기 |
| `M-x eshell` | Emacs Lisp 셸 |
| `M-!` | 셸 명령 실행 |
| `M-x eval-buffer` | 버퍼 전체를 Elisp로 평가 |
| `C-x C-e` | 포인트 앞 Elisp 표현식 평가 |
