-
Notifications
You must be signed in to change notification settings - Fork 0
JSONL Support ko
jvim은 JSON Lines (.jsonl) 파일을 자동 감지, 포맷팅된 편집, 압축 저장으로 지원합니다.
JSONL 모드는 두 가지 방법으로 활성화됩니다:
-
파일 확장자:
.jsonl확장자 파일은 항상 JSONL로 처리 -
내용 기반 감지: 다른 확장자의 경우 내용을 분석:
- 파일에 비어있지 않은 줄이 2개 이상 있어야 함
- 전체 내용이 단일 JSON 값으로 유효하면 안 됨 (포맷팅된 JSON 배열을 JSONL로 오인하는 것을 방지)
- 각 비어있지 않은 줄이 개별적으로 유효한 JSON이어야 함
- 모든 조건을 충족하면 자동으로 JSONL 모드 활성화
즉, JSONL 데이터를 담은 .json 파일도 올바르게 감지됩니다.
JSONL 파일을 열면 각 레코드가 자동으로 indent=4로 포맷팅되어 읽고 편집하기 편합니다:
디스크 상태:
{"name": "Alice", "age": 30, "email": "alice@example.com"}
{"name": "Bob", "age": 25, "email": "bob@example.com"}
jvim에서:
{
"name": "Alice",
"age": 30,
"email": "alice@example.com"
}
{
"name": "Bob",
"age": 25,
"email": "bob@example.com"
}저장(:w) 시 각 레코드가 자동으로 한 줄로 압축되어 JSONL 형식이 유지됩니다. 변환 과정:
- 포맷팅된 내용을 블록(연속된 비어있지 않은 줄 그룹)으로 분할
- 각 블록을 JSON으로 파싱
- 각 블록을 압축된 한 줄로 재직렬화
- 줄바꿈으로 연결
이 왕복 변환은 무손실입니다 — 데이터가 정확히 보존됩니다.
거터의 두 번째 열에 JSONL 레코드 번호(1, 2, 3...)가 각 레코드의 첫 번째 줄 옆에 표시됩니다. 레코드가 여러 줄에 걸칠 때 현재 보고 있는 레코드를 쉽게 식별할 수 있습니다.
레코드 인덱스는 캐시되며 내용이 변경될 때 재계산됩니다.
여러 줄에 걸친 레코드를 스크롤할 때 레코드 첫 줄의 물리적 라인 번호가 거터 상단에 계속 표시됩니다. 레코드 헤더가 화면 밖으로 스크롤되어도 현재 어떤 레코드를 보고 있는지 알 수 있습니다.
JSONL 모드에서는 레코드 간 탐색을 위한 특별한 명령이 제공됩니다:
| 명령 | 설명 |
|---|---|
:N |
레코드 N으로 이동 (1부터 시작). JSONL 모드에서 숫자는 라인 번호가 아닌 레코드 번호로 해석 |
:pN |
레코드 N으로 명시적 이동 (p = "position by record"). JSONL 모드에서 :N과 동일 |
:lN |
라인 N으로 이동 (l = "line"). JSONL 레코드 해석을 무시하고 실제 에디터 라인으로 이동 |
:1 → 레코드 1로 이동 (첫 번째 레코드)
:5 → 레코드 5로 이동
:p10 → 레코드 10으로 이동
:l25 → 에디터 라인 25로 이동 (레코드 경계 무시)
:$ → 마지막 라인으로 이동
JSONL 모드에서 JSONPath 검색을 사용하면 각 레코드가 독립적으로 파싱되고 검색됩니다. 결과는 포맷팅된 에디터 뷰의 위치로 매핑됩니다. 자세한 내용은 JSONPath 검색을 참고하세요.
JSONL 모드에서 JSONPath 치환은 각 레코드에 독립적으로 적용됩니다. 내용이 블록으로 분할되고, 각 블록이 별도의 JSON 문서로 파싱된 후 치환이 레코드별로 적용됩니다. 자세한 내용은 치환을 참고하세요.
Diff 뷰어는 --jsonl 플래그로 JSONL 비교를 지원합니다 (.jsonl 확장자는 자동 감지). 레코드가 단위로 매칭되고, 변경된 레코드는 내부적으로 라인 단위로 diff됩니다. 자세한 내용은 Diff 뷰어를 참고하세요.
:e로 파일을 열 때 새 파일의 내용에 대해 JSONL 감지가 실행되어 JSONL 모드가 자동으로 켜지거나 꺼집니다.