Org 사용자 도움말
목적
이 문서는 Emacs Org mode를 실제 작업에 사용할 때 참고하는 사용법이다.
커서 이동, 화면 스크롤, 파일 열기, 복사/붙여넣기 같은 기본 Emacs 조작은 Emacs 도움말을 먼저 참고한다.
현재 설정에서 Org 관련 주요 키는 다음과 같다.
| 기능 | 키 |
|---|---|
| 링크 저장 | C-c l |
| Agenda 열기 | C-c a |
| 코드 블록 실행 | 코드 블록 위에서 C-c C-c |
| 제목 접기/펼치기 | TAB |
| 전체 접기 순환 | S-TAB |
| TODO 상태 변경 | C-c C-t |
현재 Emacs 설정에서 사용자가 추가하거나 바꾼 Org 관련 단축키는 따로 모아 둔다.
| 기능 | 키 | 설명 |
|---|---|---|
| Capture | C-c x |
기본적으로 많이 쓰는 C-c c 대신 사용 |
| 커스텀 Org 날짜시간 삽입 | C-c . |
<YYYY-MM-DD day HH:MM> 형식의 active timestamp 삽입 |
| 현재 파일이름 삽입 | C-c 1 |
현재 버퍼의 파일 이름만 삽입 |
| 현재 날짜시간 문자열 삽입 | C-c 2 |
(YYYY-MM-DD HH:MM) 형식의 일반 문자열 삽입 |
주의: 현재 Emacs 설정에서 C-c c 는 compile 에 사용한다. Org
capture는 C-c x 로 사용한다.
기본 구조
Org 문서는 별표 * 로 제목 계층을 만든다.
* 1단계 제목 ** 2단계 제목 *** 3단계 제목 본문을 작성한다.
위 예시의 맨 앞 쉼표 , 는 실제 문서에 쓰는 제목 문법이 아니다.
#+begin_src org 코드블록 안에서 Org 문법 예시를 보여줄 때만 사용하는
이스케이프다. 쉼표가 없으면 코드블록 안의 * 줄을 현재 문서의
실제 제목으로 오해해서 출판 결과가 깨질 수 있다. 출판된 HTML에서는
이 이스케이프 쉼표가 제거되고, 독자는 * 1단계 제목 형태로 보게 된다.
실제 문서에서는 쉼표 없이 쓴다.
* 실제 제목 ** 실제 하위 제목
코드블록 안에서 예시로 보여줄 때 쉼표가 필요한 대표 줄:
*로 시작하는 제목 줄#+begin_src,#+end_src처럼 코드블록을 다시 여닫는 줄#+RESULTS:처럼 Org가 특별하게 해석하는 줄
제목 위에서:
TAB: 현재 제목 접기/펼치기S-TAB: 문서 전체 접기 상태 순환M-RET: 같은 단계 제목 추가M-S-RET: 같은 단계 TODO 제목 추가M-LEFT/M-RIGHT: 제목 단계 올리기/내리기M-UP/M-DOWN: 제목 위치 위/아래로 이동C-c C-n/C-c C-p: 다음/이전 Org 제목으로 이동
문단과 줄바꿈
Org에서 빈 줄은 문단을 나누는 기준이다.
첫 번째 문단이다. 같은 문단 안의 다음 줄이다. 두 번째 문단이다.
작성 기준:
- 문단 사이는 빈 줄 하나로 나눈다.
- 한국어 문서는 한 줄이 지나치게 길어지지 않게 적당히 끊어 쓴다.
- 줄바꿈 자체에 의미가 있는 내용은 예제 블록이나 verse 블록을 사용한다.
- 강제 줄바꿈은 꼭 필요할 때만 사용한다.
인라인 강조
인라인 강조는 의미별로 구분해 사용한다.
| Org 문법 | 의미 | 사용 기준 |
|---|---|---|
*bold* |
강한 강조 | 중요한 말, 핵심 경고 |
/italic/ |
약한 강조 | 작품명, 외래어, 어조 |
_underline_ |
밑줄 | 제한적으로 사용 |
+strike-through+ |
취소선 | 삭제되었거나 폐기된 표현 |
~code~ |
코드 | 코드, 명령어, 파일명, 변수명 |
=verbatim= |
고정 표시어 | UI 문구, 상태값, 그대로 보여줄 값 |
Org 인라인 강조는 닫는 기호 뒤에 경계가 있어야 제대로 인식된다. 하이독스
문서에서는 모든 인라인 강조 문법 뒤에 공백을 하나 넣는 것을
기본 규칙으로 한다. 강조, 이탤릭, 취소선, code, verbatim
등의 인라인 강조가 공백 없이 바로 한글과 붙으면 HTML 출판 때 강조로 해석되지
않고 *강조*, /이탤릭/, +취소선+, ~code~, =verbatim= 같은
원문 기호가 그대로 보일 수 있다.
강조 뒤에 한글을 이어 쓸 때는 다음 중 하나를 사용한다.
- 강조 닫는 기호 뒤에 공백을 하나 넣고 한글을 쓴다.
- 강조 닫는 기호와 한글 사이에 쉼표
,, 마침표., 괄호)같은 ASCII 구분 문자를 둔다.
문제는 한글과 인라인 강조 기호가 바로 붙는 경우다. ASCII 구분 문자가 사이에 있으면 Org가 경계를 인식하므로 출판 문제가 생기지 않는다.
좋은 예:
*강조* 된 말 *강조*, 다음 말 (*강조*)된 말 /이탤릭/ 문장 /이탤릭/, 문장 _밑줄_ 텍스트 +취소선+ 표현 ~code~ 값 ~code~, 값 =verbatim= 상태 =verbatim=, 상태
피할 예:
*강조*된 말 /이탤릭/문장 _밑줄_텍스트 +취소선+표현 ~code~값 =verbatim=상태
작성 기준:
- 일반 강조는
*bold*를 우선 사용한다. - 코드, 명령어, 파일명, 변수명은
~code~를 사용한다. - 화면 문구, 상태값, 고정 표시어는
=verbatim=을 사용한다. - 밑줄과 취소선은 의미가 명확할 때만 사용한다.
TODO 관리
현재 TODO 상태는 다음 순서를 사용한다.
TODO -> DOING -> DONE -> FAIL -> CANCEL
사용법:
C-c C-t: TODO 상태 변경M-S-RET: 새 TODO 항목 추가
예:
* TODO 하이독스 import 기능 점검 * DOING 테이블 편집기 UI 수정 * DONE 마이그레이션 적용 * FAIL 잘못된 접근 방식 기록
체크박스
간단한 목록 진행 상황은 체크박스를 사용한다.
- [ ] 요구사항 정리 - [X] 모델 확인 - [ ] 테스트 작성
사용법:
- 체크박스 줄에서
C-c C-c: 체크/해제 - 목록에서
M-S-RET: 새 체크박스 항목 추가
상위 항목에 진행률을 넣을 수 있다.
* 작업 [1/3] - [X] 요구사항 정리 - [ ] 구현 - [ ] 테스트
목록
순서 없는 목록:
- 항목 1 - 항목 2 - 하위 항목
순서 있는 목록:
1. 첫 번째 2. 두 번째 3. 세 번째
설명 목록:
- 용어 :: 설명 - Django :: Python 웹 프레임워크
목록 편집:
M-RET: 새 항목 추가M-UP/M-DOWN: 항목 이동M-LEFT/M-RIGHT: 들여쓰기 조정
링크
표
Org 표는 | 로 만든다.
| 이름 | 상태 | 비고 | |------+-------+------| | 모델 | DONE | 완료 | | 뷰 | DOING | 진행 | | 테스트 | TODO | 필요 |
표 안에서:
TAB: 다음 셀S-TAB: 이전 셀RET: 다음 행C-c C-c: 표 정렬M-LEFT/M-RIGHT: 열 이동M-UP/M-DOWN: 행 이동M-S-LEFT: 열 삭제M-S-RIGHT: 열 추가M-S-UP: 행 삭제M-S-DOWN: 행 추가
간단한 계산도 가능하다.
| 항목 | 수량 | 단가 | 합계 | |------+------+------+------| | A | 2 | 1000 | 2000 | | B | 3 | 2000 | 6000 | |------+------+------+------| | 총합 | | | 8000 |
날짜와 일정
날짜와 시간 삽입:
C-c .: 커스텀 Org active timestamp 삽입C-c !: 비활성 날짜 삽입C-c 2: 현재 날짜와 시간을 일반 문자열로 삽입
C-c . 와 C-c 2 는 이 문서 상단의 커스텀 단축키 표에 따로 정리한
사용자 설정이다.
예:
<2026-06-06 Sat 14:23> * TODO 서버 배포 점검 SCHEDULED: <2026-06-04 Thu> * TODO 백업 확인 DEADLINE: <2026-06-05 Fri>
사용법:
C-c C-s: SCHEDULED 설정C-c C-d: DEADLINE 설정C-c a: Agenda 열기
Agenda
Agenda는 여러 Org 파일의 TODO, 일정, 마감일을 모아 보는 기능이다.
기본 사용:
C-c a a: 일/주간 agendaC-c a t: TODO 목록C-c a m: 태그/속성 검색C-c a s: 검색
현재 설정에는 org-agenda-files 가 별도로 지정되어 있지 않다. Agenda에
포함할 파일을 정하려면 init.el 에 다음처럼 추가한다.
(setq org-agenda-files '("~/documents/org" "~/documents"))
Capture
Capture는 빠르게 메모나 할 일을 잡아두는 기능이다.
현재 키:
C-c x
현재 설정에는 capture template이 아직 없다. 기본 템플릿을 쓰거나, 나중에 다음처럼 추가할 수 있다.
(setq org-default-notes-file "~/documents/org/notes.org") (setq org-capture-templates '(("t" "Todo" entry (file "~/documents/org/notes.org") "* TODO %?\n %U\n") ("n" "Note" entry (file "~/documents/org/notes.org") "* %?\n %U\n")))
태그
제목에 태그를 붙일 수 있다.
* TODO import 성능 개선 :django:import: * 회의 메모 :meeting:
사용법:
C-c C-q: 현재 제목에 태그 설정C-c \\: 태그로 문서 안 검색C-c a m: Agenda에서 태그 검색
속성
속성은 제목 아래에 구조화된 값을 넣을 때 사용한다.
* 테이블 편집기 :PROPERTIES: :OWNER: example-user :STATUS: active :END:
사용법:
C-c C-x p: 속성 설정C-c C-c: 속성 영역 갱신
코드 블록
Org mode는 문서 안에서 코드를 실행할 수 있다.
현재 설정에서 실행 가능한 언어:
- Python
- Shell
- C
- Emacs Lisp
Python
#+begin_src python print("hello org") #+end_src
실행:
C-c C-c
Shell
#+begin_src shell pwd ls #+end_src
Emacs Lisp
#+begin_src emacs-lisp (message "hello emacs") #+end_src
결과
코드 블록 실행 후 결과는 다음처럼 붙는다.
#+RESULTS:
: hello org
코드 블록 옵션
결과를 출력으로 받기:
#+begin_src python :results output print("hello") #+end_src
표 형태로 받기:
#+begin_src python :results table return [["name", "count"], ["row", 10]] #+end_src
파일로 저장:
#+begin_src python :results file from pathlib import Path Path("result.txt").write_text("hello") return "result.txt" #+end_src
소스 편집
코드 블록 위에서:
C-c ': 별도 편집 버퍼 열기- 편집 버퍼에서
C-c ': 원래 Org 문서로 돌아가기
주의: 전역 키 C-c ' 는 vterm 으로도 설정되어 있다. 코드
블록 안에서는 Org의 소스 편집 키가 우선 동작할 수 있다.
이미지와 첨부
인용과 예시
인용:
#+begin_quote 이것은 인용문이다. #+end_quote
예시:
#+begin_example 그대로 표시할 텍스트 #+end_example
고정폭 한 줄:
: 그대로 표시되는 줄
출판 기준
Org 문서를 서비스 도움말로 출판하는 기준은 사이트마다 다르다. 공개 문서에는 일반 Org 작성법만 두고, HTML 출판 정책과 공개/비공개 판단 기준은 각 사이트의 운영 문서에서 따로 관리한다.
Export
현재 파일을 HTML로 내보내기:
C-c C-e h h
HTML 파일을 만들고 브라우저로 열기:
C-c C-e h o
텍스트/Markdown/PDF 등은 C-c C-e 메뉴에서 선택한다.
자주 쓰는 문서 패턴
작업 계획
* TODO 기능 이름 ** 목적 무엇을 해결하는가. ** 작업 - [ ] 모델 확인 - [ ] 뷰 수정 - [ ] 테스트 - [ ] 문서 갱신 ** 결정 - 선택한 방식: - 이유: ** 로그 - (2026-06-03 19:30:00) 시작
회의 메모
* 회의 제목 :meeting: SCHEDULED: <2026-06-03 Wed> ** 참석자 - ** 논의 - ** 결정 - ** 할 일 - [ ]
장애 기록
* 장애 제목 :incident: ** 현상 - ** 원인 - ** 해결 - ** 재발 방지 - [ ]
문제 해결
코드 블록이 실행되지 않을 때
현재 언어가 org-babel-do-load-languages 에 등록되어 있는지 확인한다.
현재 등록된 언어:
- Python
- Shell
- C
- Emacs Lisp
Agenda에 항목이 안 보일 때
org-agenda-files 에 해당 파일 또는 디렉터리가 들어 있는지 확인한다.
표 정렬이 이상할 때
표 안에서 =C-c C-c=를 누른다.
한글 입력이 안 될 때
현재 설정은 기본 입력기를 korean-hangul 로 지정한다.
입력기 전환:
C-\