Markdown을 Plain Text로 정리하기

Plain Text로 정리는 Markdown 문서를 .txt 파일로 변환하는 내보내기 기능이 아니다. 현재 .md 원문 안에서 강조, link, wiki link, 인용 같은 표현 토큰을 제거하고 사람이 읽는 텍스트를 남기는 편집 명령이다. 정리 범위는 선택 영역, 현재 문단, 현재 문서 전체 중에서 고른다.

이 기능은 외부 시스템에 붙여 넣을 문구를 단순화하거나, 서식이 복잡해진 일부 문단을 다시 시작하거나, 기존 문서의 내용을 최소 구조만 남긴 Markdown으로 평탄화할 때 유용하다. 원문을 직접 바꾸므로 실행 전에 범위를 확인하고, 문서 전체 명령에서는 Glif가 표시하는 확인 단계를 거친다.

ℹ️
이 장의 이미지와 영상은 공개 fixture의 임시 복사본을 실제 Glif 0.1.0에서 편집하고 저장한 결과다. 선택 영역과 문단은 범위 밖 원문 보존을, 문서 전체는 frontmatter·목록·code·표·block ID 보존을 디스크에 기록된 파일로 다시 검사했다. 화면 아래 설명과 파란 원은 캡처 안내이며 문서에는 저장되지 않는다.

세 범위의 차이

범위 기준 실행 위치 확인 단계 실행 뒤 선택
선택 영역 에디터에서 실제로 선택한 문자 범위 우클릭 메뉴 또는 명령 팔레트 없음 정리된 replacement가 다시 선택됨
현재 문단 커서가 있는 위치를 둘러싼 빈 줄 사이의 블록 우클릭 메뉴 또는 명령 팔레트 없음 정리된 문단 시작으로 커서 이동
현재 문서 활성 Markdown 본문 전체 명령 팔레트 Windows 확인 dialog 정리된 본문 시작으로 커서 이동

선택 영역 명령은 선택 길이가 0이면 아무것도 바꾸지 않는다. 경고나 성공 toast도 나타나지 않으므로, 실행 전에 파란 선택 배경이 보이는지 확인한다. 현재 문단은 한 줄만을 뜻하지 않는다. 빈 줄 없이 이어진 여러 줄은 같은 문단 범위로 처리한다. 문서 전체는 가장 넓은 변경이므로 취소 가능한 확인 dialog를 반드시 표시한다.

무엇을 지우고 무엇을 남기는가

정리 결과는 “모든 문자를 공백 하나로 합친 문자열”이 아니다. 보이는 텍스트를 중심으로 하되 읽을 수 있는 최소 블록 구조를 유지한다.

입력 문법 정리 결과 비고
**강조**, *기울임*, ~~취소선~~ 강조, 기울임, 취소선 서식 토큰만 제거
[표시 이름](./target.md) 표시 이름 target URL은 제거
[[target|표시 이름]] 표시 이름 label이 없으면 target 이름 사용
![[diagram.png]] diagram.png 또는 읽을 수 있는 이름 embed 문법 제거
`inline code` inline code code 내용 유지
![대체 텍스트](image.png) 대체 텍스트 alt가 없으면 파일 이름을 fallback으로 사용
# 제목 제목 heading 표식 제거
> 인용문 인용문 인용 표식 제거
- 항목, 1. 항목 목록 표식과 순서 유지 unordered는 -, ordered는 번호 유지
fenced code block fence와 언어 이름을 제거하고 code 내용 유지 code 자체를 실행하지 않음
GFM 표 셀 A | 셀 B 형태의 행 정렬 구분 행은 제거
HTML tag를 제거하고 읽을 수 있는 text 유지 복잡한 embedded runtime 보존용 변환이 아님
thematic break 제거 보이는 내용이 없기 때문

Markdown link를 정리하면 target 정보는 사라진다. 링크가 지식 연결이나 출처 추적에 필요하다면 Plain Text 정리보다 link label·target을 직접 편집하거나 별도 사본에서 작업한다.

실습 파일

각 실습은 서로 영향을 주지 않는 독립 문서다. 파일을 내려받아 같은 폴더에 둔 뒤 그 폴더를 Glif Scope로 열거나, 각 파일을 별도 테스트 Scope에 복사한다.

공개 파일은 항상 변경 전 상태다. 영상과 이미지는 임시 복사본에서만 실행했으므로 같은 절차를 반복할 수 있다.

1. 선택 영역만 Plain Text로 정리한다

selection-normalize-lab.md를 열고 다음 첫 문장 전체를 선택한다.

릴리즈 노트에는 **강조 문구**, [승인 기준](./approval-policy.md), [[team-handbook|담당 팀]]이 함께 들어 있다.

선택 다음 문단의 `release-ready`와 마지막 인용문은 범위 밖 비교군이다. 정리 뒤에도 Markdown 원문이 그대로 남아야 한다.

Markdown 토큰을 포함한 첫 문장만 선택한 상태

선택 위에서 우클릭한 뒤 선택 영역을 Plain Text로 정리를 누른다. 메뉴가 열려도 선택 배경이 유지되는지 확인한다. 같은 명령은 Ctrl+P를 누르고 > 선택 영역 plain text를 검색해 실행할 수도 있다.

선택 영역 Plain Text 정리 항목을 연 에디터 우클릭 메뉴

결과는 다음과 같다.

릴리즈 노트에는 강조 문구, 승인 기준, 담당 팀이 함께 들어 있다.

`release-ready` 상태 표시는 선택 범위 밖에 있으므로 그대로 남아야 한다.

선택한 문장만 토큰이 제거되고 다음 inline code 문단은 남은 결과

영상은 선택 범위 확인, 우클릭 메뉴 이동과 클릭, 정리 결과를 3.0초에 보여 준다. 이 실증에서는 선택 밖 inline code와 인용문이 파일에서도 그대로인지 함께 검사했다.

2. 현재 문단을 Plain Text로 정리한다

paragraph-normalize-lab.md에는 세 블록이 빈 줄로 나뉘어 있다.

  1. 변경하지 않을 첫 문단
  2. 인용 표식으로 시작하고 두 줄이 이어진 대상 문단
  3. 변경하지 않을 다음 목록

대상 문단의 아무 위치나 클릭한다. 첫 줄만 드래그할 필요는 없다. Glif는 커서 위치에서 앞뒤로 이동하며 빈 줄을 만날 때까지를 현재 문단으로 결정한다.

두 줄짜리 인용 문단에 커서를 둔 변경 전 상태

우클릭 메뉴에서 현재 문단을 Plain Text로 정리를 선택한다. 명령 팔레트에서는 > 현재 문단 plain text로 찾을 수 있다.

현재 문단 Plain Text 정리 항목을 연 우클릭 메뉴

실행하면 > 인용, 강조, wiki link와 inline code 토큰이 제거되고 두 줄의 보이는 문장은 남는다. 앞 문단의 **그대로 보존**, [원본 링크](./source.md)와 뒤 목록은 바뀌지 않는다.

현재 문단의 두 줄만 정리되고 앞 문단과 뒤 목록은 유지된 결과

3.0초 영상은 커서가 있는 문단의 판정, 우클릭 메뉴와 정리 결과를 보여 준다. 커서가 빈 줄에 있을 때는 기대와 다른 인접 범위가 선택될 수 있으므로, 반드시 내용이 있는 줄 안에서 실행한다.

3. 문서 전체를 Plain Text로 정리한다

document-normalize-lab.md는 다음 항목을 한 문서에 넣어 문서 전체 변환 경계를 검사한다.

  • title, aliases, tags가 있는 YAML frontmatter
  • H1, 강조, 일반 link, wiki link와 inline code
  • 인용문, ordered list, fenced code block과 GFM 표
  • <!-- glif:block-id: ... --> 주석이 붙은 참조 가능 문단

문서 전체 정리 전 heading, link, 인용, 목록, code, 표와 block ID가 있는 원문

Ctrl+P를 누르고 > 현재 문서 plain text를 입력한 뒤 현재 문서를 Plain Text로 정리를 선택한다. 이 명령은 우클릭 메뉴에 넣지 않아 범위가 넓은 작업임을 구분한다.

명령 팔레트에서 현재 문서 Plain Text 정리를 선택한 상태

Glif는 **현재 문서 전체를 plain text 중심으로 정리합니다. 계속할까요?**라고 묻는다. 취소를 누르면 editor mutation을 시작하지 않는다. 확인을 누르면 현재 활성 문서 한 개를 하나의 편집 transaction으로 바꾼다.

현재 문서 전체 정리 전 표시되는 Windows 확인 대화상자

정리 뒤 live Markdown 화면에서는 heading과 표 같은 남은 구조를 확인할 수 있다.

문서 전체 정리 직후 live Markdown 화면

상단의 Markdown 원문 보기를 눌러 최종 source를 확인한다. 다음 사항이 모두 보여야 한다.

  • frontmatter는 metadata 계층에 그대로 남는다.
  • heading의 #, 강조의 **, link와 wiki link target, 인용의 >는 제거된다.
  • ordered list 번호, code 내용, 표의 | 셀 경계는 유지된다.
  • block reference가 끊어지지 않도록 glif:block-id 주석은 유지된다.

문서 전체 정리 뒤 보존 구조와 제거된 토큰을 확인하는 Markdown 원문

3.1초 영상은 문서 전체 명령, 확인 적용과 원문 검증으로 이어진다. Windows 확인 dialog은 WebView와 별도 top-level window이므로 dialog 이미지는 해당 창만 깔끔하게 캡처했고, 영상은 Glif client 안의 동작을 보여 준다.

frontmatter와 block ID 보존 규칙

문서 전체 정리에서 파일 맨 앞이 유효한 YAML/JSON 형태의 frontmatter라면 --- 경계와 그 안의 값을 그대로 둔다. 첫 의미 있는 줄이 key: 형태이거나 {로 시작하는지 확인해 일반 thematic break와 구분한다. frontmatter의 title·aliases·tags를 plain text 본문으로 풀어 쓰지 않는다.

block ID 주석은 문단이나 문서 전체 정리 뒤에도 reference identity로 남는다.

<!-- glif:block-id: glif-guide-normalize -->
참조 가능한 **블록 ID 문단**은 주석을 보존한다.

정리 결과는 다음과 같다.

<!-- glif:block-id: glif-guide-normalize -->
참조 가능한 블록 ID 문단은 주석을 보존한다.

주석만 있고 보이는 문단이 비어 있어도 block ID 자체는 남긴다. 반대로 임의 HTML 주석 전체를 보존하는 일반 HTML round-trip 기능은 아니다.

취소와 되돌리기

  • 문서 전체 확인 dialog에서 취소하면 아무 변경도 시작하지 않는다.
  • 적용 직후 같은 editor에서 Ctrl+Z를 한 번 누르면 해당 정리 transaction을 되돌릴 수 있다.
  • 다른 문서로 이동하거나 앱을 닫기 전에 되돌리기가 필요한지 판단한다.
  • 저장·닫기 이후 확실한 복구가 필요하면 문서 히스토리나 외부 버전 관리의 이전 revision을 사용한다.

Plain Text 정리는 의미를 추론해 link target을 문장에 덧붙이거나 잃은 formatting을 자동 복원하지 않는다. 중요한 문서는 사본 또는 버전 관리가 있는 Scope에서 먼저 실행한다.

예상과 다를 때

증상 확인할 점 해결
선택 영역 명령을 눌러도 변화가 없음 실제 선택 길이가 0인지 변경할 source를 다시 드래그해 선택
문단 범위가 너무 넓음 사이에 빈 줄이 없는지 원하는 경계에 빈 줄을 만든 뒤 다시 실행
문단 범위가 예상과 다름 커서가 빈 줄이나 다른 블록에 있는지 대상 내용이 있는 줄 안을 클릭
link target이 사라짐 Plain Text 정리의 의도된 결과인지 실행 전 사본을 만들거나 Ctrl+Z
문서 전체 명령이 실행되지 않음 확인 dialog에서 취소했는지 다시 실행하고 변경 범위를 검토한 뒤 확인
frontmatter가 본문으로 바뀜 파일 첫 frontmatter가 유효한 --- 경계와 key: 구조인지 metadata 문법을 고친 뒤 사본에서 재시도
block reference가 중요함 canonical glif:block-id 주석인지 실행 뒤 원문 보기와 Link Health로 reference 확인

완료 체크리스트

  • 선택 영역, 현재 문단, 현재 문서 중 의도한 범위를 골랐다.
  • link target처럼 제거 뒤 복구하기 어려운 정보가 필요한지 확인했다.
  • 선택·문단 작업에서는 범위 밖 비교 문장이 그대로 남았다.
  • 문서 전체 작업에서는 확인 dialog의 문구와 활성 문서를 확인했다.
  • 원문 보기에서 보존해야 할 목록·code·표·block ID를 확인했다.
  • 필요하면 Ctrl+Z, 문서 히스토리 또는 버전 관리로 복구했다.

이 체크리스트까지 통과하면 ED-15 선택 영역, ED-16 현재 문단, ED-17 문서 전체 Plain Text 정리의 사용자 절차와 저장 결과를 재현한 것이다.