지원 형식
VMark는 아래의 모든 파일 형식을 직접 열 수 있습니다. 차별화된 특징은 스키마 인식 미리보기입니다. 알려진 아티팩트 파일의 경우, 일반적인 JSON 트리가 아닌 적합한 뷰로 렌더링됩니다.
형식 활성화
Markdown, 일반 텍스트, YAML/YML 은 항상 전체 에디터로 열립니다 — 이것이 기본값입니다. 그 외의 형식은 모두 기본적으로 비활성화되어 있으며, 설정 → 형식의 카테고리 토글을 통해 활성화할 수 있습니다.
| 토글 | 활성화 대상 |
|---|---|
| 데이터 형식 | .json, .jsonl, .toml (소스 + 트리 분할 창, Cargo / package.json / pyproject 스키마 렌더러 포함) |
| 다이어그램 & SVG | .mmd, .svg (소스 + 새니타이즈된 라이브 렌더 분할 창) |
| HTML 미리보기 | .html, .htm (샌드박스 iframe — HTML 보안 모델 참조) |
| 코드 뷰어 | 읽기 전용 코드 뷰어 12종 (.ts, .tsx, .js, .jsx, .py, .rs, .go, .css, .sh, .bash, .rb, .lua) |
카테고리가 비활성화된 경우, 해당 확장자는 일반 텍스트 폴백으로 열립니다 — 미리보기나 스키마 뷰 없이도 파일은 계속 열립니다. 토글을 전환하면 레지스트리가 즉시 재빌드되고, 열려 있는 탭이 적절한 어댑터로 다시 마운트됩니다.
다중 형식 지원으로 업그레이드한 후 첫 실행 시, VMark는 설정 → 형식으로 안내하는 일회성 토스트 알림을 표시합니다. 알림을 닫았거나 새로 설치한 경우, 언제든지 설정 → 형식 패널에서 확인할 수 있습니다.
한눈에 보기
| 분류 | 확장자 | 기본값 | 에디터 | 미리보기 |
|---|---|---|---|---|
| Markdown | .md, .markdown, .mdown, .mkd, .mdx | 항상 켜짐 | WYSIWYG + 소스 모드 | 렌더링된 본문 |
| 일반 텍스트 | .txt | 항상 켜짐 | 소스 | — |
| 데이터 — YAML | .yaml, .yml | 항상 켜짐 | 소스 + 트리 | 탐색 가능한 트리, 스키마 인식 (GitHub Actions, VMark 워크플로우) |
| 데이터 — JSON | .json, .jsonl | 데이터 형식 토글 필요 | 소스 + 트리 | 탐색 가능한 JSON 트리, 스키마 인식 (package.json) |
| 데이터 — TOML | .toml | 데이터 형식 토글 필요 | 소스 + 트리 | 탐색 가능한 트리, 스키마 인식 (Cargo.toml, pyproject.toml) |
| 다이어그램 | .mmd | 다이어그램 & SVG 토글 필요 | 소스 + 렌더 | 라이브 Mermaid 다이어그램 |
| 벡터 | .svg | 다이어그램 & SVG 토글 필요 | 소스 + 렌더 | 새니타이즈된 인라인 렌더 |
| 웹 | .html, .htm | HTML 미리보기 토글 필요 | 소스 + 렌더 | 샌드박스 iframe (빈 sandbox="", DOMPurify, CSP); 신뢰 모드는 파일별로 직접 선택해야 켜집니다 |
| 코드 (읽기 전용) | .ts, .tsx, .js, .jsx, .py, .rs, .go, .css, .sh, .bash, .rb, .lua | 코드 뷰어 토글 필요 | 뷰어 (편집 전환 가능) | — |
| 미디어 | 이미지 (.png, .jpg, .gif, .webp, .heic, .tiff, …), 비디오 (.mp4, .webm, .mov, …), 오디오 (.mp3, .wav, .flac, …) | 항상 켜짐 | 뷰어 (읽기 전용) | 네이티브 이미지 / <video> / <audio> |
코드 파일은 기본적으로 읽기 전용으로 열리며, 편집 활성화 또는 외부 편집기에서 열기 배너가 표시됩니다.
보기 모드 (소스 / 분할 / 미리 보기)
미리보기가 있는 모든 형식 — HTML, SVG, Mermaid, JSON, YAML, TOML — 은 오른쪽 위 모서리에 작은 소스 · 분할 · 미리 보기 토글이 표시된 상태로 열립니다:
- 소스 — 편집 가능한 소스 창을 전체 너비로 표시합니다.
- 분할 — 소스와 미리보기를 나란히 표시합니다 (기본값).
- 미리 보기 — 렌더링된 결과를 전체 너비로 표시합니다. 미리 보기는 읽기 전용 렌더이므로, 편집하려면 소스 또는 분할로 다시 전환하세요.
키보드로도 전환할 수 있습니다: F6 은 소스 ⇄ 분할을, Shift + F6 은 미리 보기 ⇄ 분할을 전환합니다 (분할이 기본 상태). 선택은 탭별로 기억됩니다. 새로 여는 파일의 기본값은 설정 → 형식 → 기본 보기 모드 에서 지정합니다.
미리보기가 없는 형식 (일반 텍스트, 코드 뷰어) 은 항상 소스만 표시하므로 토글이 나타나지 않습니다.
미디어 파일 (이미지, 비디오, 오디오)
사진, 비디오, 오디오 파일을 열면 VMark가 인라인으로 보여 줍니다 — Finder의 Quick Look처럼요. 미리 보는 방법은 두 가지입니다:
- 열기 (파일 탐색기에서 클릭하거나, 파일 → 파일 열기... 를 사용하거나, 끌어다 놓기) 하면 탭에서 볼 수 있습니다.
- Quick Look: 탐색기에서 파일을 선택하고 Space 를 누르면 창 전체를 덮는 미리보기 오버레이가 표시됩니다. Space, Esc 를 누르거나 배경을 클릭하면 닫힙니다.
동작 방식과 알아 둘 점:
- 텍스트로 로드하지 않습니다. 미디어는 바이너리입니다 — VMark는 네이티브 에셋 파이프라인을 통해 파일을 뷰어로 곧바로 스트리밍합니다. UTF-8로 읽지 않으며, 문서로서 메모리에 보관하지도 않고, 편집하거나 저장할 수도 없습니다. 수 기가바이트짜리 비디오도 즉시 열리고 네이티브로 탐색됩니다.
- 디스크의 변경이 반영됩니다. 에디터에서 이미지를 다시 내보내거나 스크립트가 파일을 다시 쓰면, 열려 있는 탭이 새 버전을 스스로 가져옵니다 — 다시 열거나, 닫았다가 다시 열 필요가 없습니다.
- 폭넓은 형식 지원. VMark는 파일을 플랫폼의 미디어 엔진에 넘기므로, 지원 범위는 시스템 웹뷰가 디코딩할 수 있는 형식을 따릅니다. macOS에서는 범위가 넓어 HEIC, TIFF,
.mov/H.264, FLAC 모두 재생됩니다. 웹뷰가 디코딩할 수 없는 형식 (예:.mkv,.avi,.wmv) 도 열리며, 기본 앱으로 열기 와 Finder에서 보기 (Windows에서는 탐색기에서 보기, Linux에서는 파일 관리자에서 보기) 가 있는 대체 패널이 표시됩니다. - 읽기 전용. 미디어 탭은 수정됨 상태가 되지 않으며, 저장 확인 없이 닫힙니다.
스키마 인식 미리보기
경로 또는 내용이 알려진 스키마와 일치할 때, VMark는 일반 트리 대신 적합한 뷰로 대체합니다.
GitHub Actions 워크플로우 (.github/workflows/*.yml)
워크플로우 워크벤치로 열립니다: 대화형 작업 DAG 캔버스와 저장 / 취소가 있는 구조화된 폼 에디터 (워크플로우 뷰어 가이드 참조). 소스 창도 워크플로우를 인식합니다 — $ 표현식 자동 완성, 커서 위치에 따른 캔버스 작업 강조, 로컬 uses: 참조의 Cmd-클릭 이동을 지원합니다.
- 경로 감지:
.github/workflows/하위의.yml/.yaml파일은 워크플로우 렌더러로 라우팅됩니다 — YAML 이 손상된 경우에도 진단과 함께 저하된 뷰를 표시합니다. (파일은 먼저 YAML 어댑터에 도달해야 하므로,.yml/.yaml확장자가 필요합니다.) - 내용 감지: 최상위
on:및jobs:키.
VMark 워크플로우 (최상위 steps:)
워크플로우 실행 패널로 열립니다: 상태 줄이 있는 실행 / 취소 툴바, 실시간 단계 그래프 (또는 파싱 오류), 그리고 파일을 쓴 실행이 끝난 뒤에는 파일 복원 이 표시됩니다. 워크플로우 가이드를 참조하세요.
- 경로 감지:
.github/workflows/아래에서는 절대 감지하지 않습니다 — 그 폴더는 GitHub의 것입니다. - 내용 감지: YAML 이 파싱되고, 최상위
jobs:가 없으며, 최상위steps:목록이 있고, 그중 적어도 한 단계의uses:가genie/,action/,webhook/중 하나로 시작해야 합니다. 손상된 YAML 은 절대 VMark 워크플로우가 아닙니다. - 이 패널을 쓰려면 설정 → 고급 → 워크플로 엔진 이 필요합니다. 엔진이 꺼져 있으면 파일은 일반 YAML 트리로 표시됩니다 (이 탭에서 시작한 실행이 아직 진행 중이라면 예외로, 그 실행의 취소 버튼에 계속 접근할 수 있도록 패널이 유지됩니다).
Cargo.toml
Rust 의존성 트리로 열립니다 — 런타임, 개발, 빌드 의존성, 버전 사양 및 피처 플래그 포함.
- 경로 감지: POSIX 또는 Windows 경로에서 파일명
Cargo.toml(대소문자 무관). - 내용 감지:
[package]또는[workspace]헤더. - 네트워크 호출 없음 — VMark는 crates.io를 해석하지 않습니다.
package.json
npm 의존성 트리로 열립니다 — dependencies, devDependencies, peerDependencies, optionalDependencies.
- 경로 감지: 파일명
package.json. - 내용 감지: 최상위
name과dependencies/devDependencies/peerDependencies중 하나 이상.
pyproject.toml
Python 의존성 트리로 열립니다 — PEP 621 ([project] + [project.optional-dependencies]) 및 Poetry ([tool.poetry.dependencies], [tool.poetry.dev-dependencies], [tool.poetry.group.<name>.dependencies]) 모두 지원.
- 경로 감지: 파일명
pyproject.toml. - 내용 감지:
[project]또는[tool.poetry]헤더 (TOML 파싱 성공 시).
편집 규칙
- Markdown 은 전체 툴바, 단락 서식, CJK 규칙, 수학, Mermaid, 각주 등 모든 기존 Markdown 기능을 제공합니다.
- 데이터 형식 (JSON, YAML, TOML) 은 소스 창에 파싱 오류 거터 마커와 함께 열리며, 트리 미리보기가 입력에 따라 실시간으로 업데이트됩니다. Markdown 전용 메뉴 동작 (CJK 서식, 블록 삽입, 단락 서식)은 비활성화되고, 모드 관련 컨트롤은 활성 상태를 유지합니다. 오른쪽 클릭 컨텍스트 메뉴는 클립보드 동작 (잘라내기/복사/붙여넣기/모두 선택) 으로 축소됩니다.
- 시각적 형식 (Mermaid, SVG, HTML) 은 소스 창에 열리고, 오른쪽 창에 렌더링된 뷰가 표시됩니다. 미리보기는 입력보다 낮은 우선순위로 렌더링되므로, 큰 문서에서는 키를 누를 때마다 다시 렌더링하는 대신 캐럿보다 한 박자 늦게 따라옵니다.
- 코드 형식 은 구문 강조 뷰어로 열립니다. 인플레이스 편집으로 전환하거나 외부 에디터에서 열 수 있습니다 (아래 참조).
Markdown 방언
VMark는 remark (내부적으로 micromark) 로 Markdown을 읽고 씁니다: CommonMark에 더해 GitHub Flavored Markdown (표, 작업 목록, ~~ 취소선, 자동 링크, 각주), YAML 프론트 매터, $…$ / $$…$$ 수학, 위키 링크 ([[target]]), GitHub 알림 (> [!NOTE], [!TIP], [!IMPORTANT], [!WARNING], [!CAUTION]), <details> 블록, [TOC], 그리고 네 가지 인라인 마크 ==highlight==, ~subscript~, ^superscript^, ++underline++ 를 지원합니다. 물결표 하나는 아래 첨자이며, 절대 취소선이 아닙니다.
중첩 한도. WYSIWYG는 인용문과 목록을 최대 1000단계까지 중첩해 지원합니다. 그보다 깊은 문서는 깊이를 알려 주는 메시지와 함께 소스 모드 로 열리며, 상태 표시줄에 "소스 모드로 열림(WYSIWYG로 표시할 수 없음)." 이 표시됩니다. 이 상태에서는 리치 에디터가 파일을 덮어쓰지 못하도록 보호됩니다. 중첩을 줄인 다음 WYSIWYG로 전환 을 사용하세요. 펜스 코드, 구분선, 인라인 강조는 한도에 포함되지 않습니다. 대용량 파일도 참조하세요.
VMark가 파일 형식을 결정하는 방법
VMark는 Markdown을 기본값이 아니라 허용 목록으로 취급합니다. 규칙은 다음 순서를 따릅니다:
- Markdown 계열 확장자 (
.md,.markdown,.mdown,.mkd,.mdx) 는 리치 Markdown 에디터로 열립니다. - 등록된 비 Markdown 확장자 (해당 카테고리가 활성화된 경우 — JSON, YAML, 코드 뷰어 등) 는 그 형식의 소스 창으로 열립니다.
- 그 외 모든 것 —
.env,.env.local,Dockerfile,Makefile,.gitignore, 알 수 없는 확장자 — 은 일반 텍스트 소스 창 으로 열리며, 절대 Markdown 에디터로 열리지 않습니다.
따라서 설정 파일이 모르는 사이에 Markdown으로 렌더링되는 일은 없습니다. .env.local 은 일반 텍스트로 열리고, KEY=value 줄, # 주석, 밑줄이 입력한 그대로 유지됩니다.
점 파일 계열은 그룹으로 인식됩니다: .env 에 대한 재정의는 .env.local, .env.production 등에도 적용됩니다.
시스템에서 파일 열기
설치 프로그램은 VMark를 운영 체제에 다음 파일 형식의 에디터로 등록하므로, 이 파일들은 다음으로 열기 에 나타나고 더블 클릭으로 VMark에서 열 수 있습니다:
| 확장자 | 등록 이름 |
|---|---|
.md, .markdown, .mdown, .mkd, .mdx | Markdown 문서 |
.txt | 일반 텍스트 문서 |
.json, .jsonl | JSON 문서 |
.yaml, .yml | YAML 문서 |
.toml | TOML 문서 |
.mmd | Mermaid 다이어그램 |
.svg | SVG 이미지 |
.html, .htm | HTML 문서 |
Windows 에서 설치 프로그램은 이미 다른 프로그램이 처리하는 파일 형식을 가로채지 않습니다: 이미 기본 프로그램이 있는 확장자마다 VMark는 연결 프로그램 에 자신을 추가하고 기존 기본값은 그대로 둡니다. 아무것도 등록되지 않은 경우에만 기본값이 됩니다 — 실제로는 Markdown 확장자이며, .txt, .html, .htm, .svg 는 해당하지 않습니다. Windows 설정에서 직접 선택한 기본값이 항상 우선합니다. 제거하면 Windows의 새로 만들기 → 텍스트 문서 메뉴 항목과 이전 처리기가 복원됩니다.
등록된 파일은 해당 형식이 활성화된 경우에만 VMark에서 열립니다 (형식 활성화 참조). 그렇지 않으면 일반 텍스트로 열립니다.
Windows와 Linux에서는 명령줄로 넘긴 폴더(vmark C:\notes 또는 vmark ~/notes)가 macOS에서 Dock 아이콘에 폴더를 끌어다 놓을 때처럼 자체 창에서 워크스페이스로 열립니다. VMark가 이미 실행 중일 때도 마찬가지입니다.
일반 파일의 구문 강조
파일이 일반 텍스트로 열리더라도, VMark가 형식을 인식하면 색상을 입힙니다 — .env/.ini/.conf (속성), .sh/.bash (셸), Dockerfile, .toml, .sql, .diff, 그리고 일반적인 언어들. 이는 순전히 시각적인 것으로, 파일이 어떤 에디터로 열리는지는 절대 바꾸지 않으며, 코드 뷰어 카테고리의 활성화 여부와 관계없이 동작합니다.
재정의: "파일 형식 설정"
감지 결과는 기본값일 뿐, 속박이 아닙니다. 명령 팔레트를 열고 다음을 실행하세요:
- 파일 형식 설정: 일반 텍스트 — 현재 파일 계열을 일반 텍스트로 열도록 강제합니다 (예: 원시 메모로 쓰는
.txt가 렌더링되지 않게 하기). - 파일 형식 설정: Markdown —
.md가 아닌 파일을 Markdown 에디터로 렌더링합니다 (예: 실제로 Markdown으로 작성하는.txt). - 파일 형식 설정: 기본값으로 재설정 — 재정의를 제거합니다.
재정의는 파일 계열별로 (확장자 기준, 또는 .env 같은 파일은 점 파일 이름 기준) 기억되며 세션이 바뀌어도 유지됩니다. 위의 기본 규칙보다 우선합니다.
찾기, 저장, 내용 검색
- 파일 → 파일 열기... 는 두 가지 필터를 제공합니다: 지원되는 모든 형식(등록된 모든 형식)과 Markdown. 이 항목에는 기본 단축키가 없습니다 —
Mod + O는 빠른 열기입니다 — 하지만 설정 → 단축키에서 지정할 수 있습니다. 다른 이름으로 저장 필터와 기본 저장 확장자는 활성 탭의 형식 어댑터에서 파생되므로,.toml파일을 저장할 때.toml이 확장자로 제안됩니다. - 드래그 앤 드롭 은 등록된 모든 확장자를 허용합니다.
- 다른 이름으로 저장 필터와 저장 시 기본 확장자는 활성 탭의 형식 어댑터에서 파생됩니다.
- Cmd+Shift+H 내용 검색 ("파일에서 찾기") 은 텍스트 기반 형식 (Markdown, txt, json, yaml, toml, html, svg, Mermaid) 을 모두 인덱싱합니다. 코드 파일은 기본적으로 제외됩니다 — 코드 뷰어 모드이기 때문입니다.
HTML 보안 모델
다중 형식 계획의 ADR-4에 따라, HTML 미리보기는 세 가지 독립적인 방어 계층에 의존합니다:
<iframe sandbox="">— 빈 허용 목록으로 스크립트, 동일 출처, 폼, 팝업을 모두 차단합니다. 샌드박싱은 iframe 속성만으로 강제 적용됩니다 (MDN 에 따르면<meta>를 통한 CSP 는 샌드박스가 아닙니다).- DOMPurify 새니타이징 — 먼저 실행되어
<script>,javascript:URL, 인라인 이벤트 핸들러, base-href 트릭을 제거합니다. - CSP
<meta>삽입 —default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; base-uri 'none';— iframe 내 리소스 로딩을 제한합니다.
유효성 검사기는 스크립트 태그, javascript: URL, 인라인 이벤트 핸들러를 경고로 표시하여 차단 내용을 확인할 수 있습니다. 파일을 신뢰하면 이들은 대신 정보로 표시되므로, 신뢰 배너와 모순되는 내용이 없습니다. 두 가지 메시지는 신뢰 여부와 관계없이 미리보기가 절대 허용하지 않는 것을 알려 줍니다: 외부 스크립트 (<script src="…">) 는 절대 로드되지 않습니다 — 파일이나 URL에서 오는 스크립트는 없기 때문입니다. 또한 다른 창이나 최상위 페이지를 대상으로 하는 javascript: 링크 (target="_top", _blank, 또는 <base target>) 는 절대 이동하지 않습니다 — 미리보기는 자기 자신을 벗어날 수 없기 때문입니다. 감지는 페이지의 태그를 근사적으로 읽습니다. 발견 사항에 라벨을 붙일 뿐 무엇이 실행될지는 결정하지 않습니다 — 그것은 샌드박스가 결정합니다.
이 미리보기의 공식 보안 승인은 아직 대기 중이며, 미리보기는 렌더링된 페이지 위의 알림으로 이를 표시합니다: HTML 미리보기는 샌드박스화되어 있습니다. 보안 검토는 아직 진행 중입니다. 위의 세 가지 방어 계층은 적용되어 있으며, 남은 단계는 실행 중인 앱의 웹뷰 안에서 OWASP XSS 페이로드로 이를 확인하는 것입니다.
신뢰된 HTML 미리 보기 (옵트인)
위의 안전한 미리보기가 기본값이며 절대 바뀌지 않습니다. 직접 작성한 문서 — 대화형 실습, 로컬 대시보드, 독립형 데모 — 의 경우, 그 파일 하나에 대해, 이번 세션 동안 스크립트 실행을 허용할 수 있습니다.
미리보기 위의 막대에서 신뢰된 미리 보기 활성화… 를 사용하세요. 먼저 경고가 표시되며, 확인하기 전에는 아무것도 실행되지 않습니다. 활성화되어 있는 동안 막대는 계속 표시되어 신뢰됨 — 스크립트 활성화됨 이라고 알려 주며, 신뢰 취소 는 클릭 한 번이면 됩니다.
신뢰 모드가 허용하는 것과 허용하지 않는 것:
| 신뢰된 미리 보기 | |
|---|---|
JavaScript, DOM, 포인터 이벤트, requestAnimationFrame, Web Audio | ✅ 실행됨 |
네트워크 (fetch, XMLHttpRequest, WebSocket, 원격 이미지/스크립트) | ❌ default-src 'none' 으로 차단됨 |
| VMark 자체 페이지, Tauri 명령, 파일 시스템 | ❌ 접근 불가 — 문서는 자체 불투명 출처(opaque origin)에서 실행됩니다 |
| 최상위 탐색, 팝업, 폼 제출, 다운로드, 모달 | ❌ 허용되지 않음 (sandbox="allow-scripts" 외에는 아무것도 없음) |
| 카메라, 마이크, 위치 정보, 클립보드 | ❌ 프레임에 위임되는 기능 없음 |
localStorage / sessionStorage | ❌ 사용 불가 — 불투명 출처에는 동일 출처 저장소가 없습니다 |
eval / new Function | ❌ 허용되지 않음 |
알아 둘 만한 세 가지 특성:
- 신뢰는 절대 추론되지 않습니다.
.html확장자로부터도, 파일의 출처로부터도, 이미 신뢰한 형제 파일로부터도 추론하지 않습니다. 오직 확인만이 신뢰를 부여합니다. - 신뢰는 절대 저장되지 않습니다. VMark를 종료하면 모든 허용이 사라집니다. 또한 저장되지 않은 문서에서는 사용할 수 없습니다 — 허용을 연결할 식별자가 없기 때문이므로, 먼저 파일을 저장하세요.
- 신뢰된 미리보기는 스스로 다시 실행되지 않습니다. 소스를 편집하면 현재 소스와 일치하지 않을 수 있습니다 로 표시되고 다시 로드 를 기다리므로, 실행 중인 시뮬레이션이 키를 누를 때마다 초기화되지 않습니다. VMark가 프레임이 무엇을 실행하고 있는지 알 수 없을 때도 같은 표시가 나타납니다 — 탭을 벗어났다가 돌아오거나, 닫았다가 다시 열면, 미리보기는 그 파일에 대해 마지막으로 게시된 내용을 계속 실행하므로, 최신 상태라고 주장하는 대신 그렇게 알려 줍니다. 다시 로드 는 현재 상태의 파일을 다시 게시합니다.
Windows에서는 로컬 http 출처로 제공됩니다
WebView2에는 사용자 정의 URL 스킴이 없으므로, Windows에서는 신뢰된 문서가 vmark-trusted:// 대신 http://vmark-trusted.localhost 에서 제공됩니다 — 같은 허용, 같은 샌드박스, 같은 CSP를, Tauri가 그곳에서 모든 사용자 정의 프로토콜에 쓰는 URL 형태로 제공하는 것입니다. 안전한 미리보기는 모든 플랫폼에서 동작합니다.
신뢰된 콘텐츠는 자체의 엄격한 CSP를 갖춘 vmark-trusted:// 출처 (Windows에서는 http://vmark-trusted.localhost) 에서 제공됩니다. 이 우회는 장식이 아니라 필수입니다: srcdoc, blob:, data: 프레임은 VMark 자체의 script-src 'self' 정책을 상속하며, 프레임 안의 CSP는 상속된 정책을 더 엄격하게 만들 수만 있고 완화할 수는 없습니다 — 따라서 iframe 속성만으로는 인라인 스크립트를 실행시킬 수 없습니다.
외부 에디터에서 열기
코드 파일의 경우, 읽기 전용 배너의 외부 편집기에서 열기 버튼으로 원하는 에디터를 실행합니다. 해석 순서:
- 설정 → 형식 → 외부 편집기 (GUI 필드 — 설정 참조). 알려진 에디터의 이름 (
code,cursor,zed,subl,bbedit,idea,vim,nvim,emacs,notepad++, …) 또는 에디터의 전체 경로 — macOS 에서는.app번들, Linux/Windows 에서는 실행 파일 — 를 입력합니다. 이 필드에는 프로그램 하나만 들어가며 인수는 넣을 수 없습니다. 인수를 전달하려면$VMARK_EXTERNAL_EDITOR를 사용하세요. $VMARK_EXTERNAL_EDITOR(프로젝트 수준 환경 변수 재정의)$VISUAL$EDITOR- 플랫폼 기본값 (macOS 에서
open -t, Windows 에서notepad.exe, Linux 에서xdg-open)
GUI 설정이 환경 변수보다 우선합니다 — 명시적인 것이 암묵적인 것보다 우선합니다. 필드를 비워 두면 환경 변수 폴백 체인을 사용합니다.
VMark는 로그인 셸 PATH 를 통해 라우팅하므로, macOS GUI 앱에서 실행할 때 VS Code / Cursor / JetBrains 래퍼가 올바르게 해석됩니다.
보안 게이트
무엇이든 실행하기 전에 외부 편집기 설정 자체를 먼저 검사합니다. VMark는 다음을 거부합니다:
- 셸 문자 (
;,|,&,`,$,<,>, 따옴표, 줄바꿈) 와 맨 앞의- - VMark가 알지 못하는 에디터의 단순 이름 — "“X”은(는) VMark가 이름으로 인식하는 편집기가 아닙니다. 편집기의 전체 경로를 입력하세요"
- 상대 경로,
..세그먼트나 끝의 슬래시가 있는 경로, 또는 존재하지 않는 경로 - 주어진 파일을 여는 대신 실행하는 프로그램 — 셸 (
sh,bash,zsh,pwsh,cmd, …), 인터프리터 (python,node,ruby,perl,osascript, …), 런처 (env,sudo,open,xdg-open, …) 또는 터미널 에뮬레이터 — 입력한 이름과 링크가 가리키는 이름 모두로 검사합니다
폴백 체인의 환경 변수는 제한하지 않습니다: 그것은 VMark 바깥에서 사용자가 직접 설정한 것이기 때문입니다.
open_in_external_editor Tauri 명령은 또한 다음 경우를 거부합니다:
- 존재하지 않는 경로
- 디렉터리 및 기타 일반 파일이 아닌 것 (소켓, 장치)
- 정규화된 확장자가 VMark의 등록된 형식 집합에 없는 경로
- 정규 대상이 위 검사 중 하나를 통과하지 못하는 심볼릭 링크
손상된 웹뷰는 이 버튼을 사용하여 임의의 시스템 파일 (암호, 키 등) 에서 외부 에디터를 실행할 수 없습니다 — VMark가 스스로 열 수 있는 경로에 한해서만 가능합니다.
지원하지 않는 것
계획의 비목표에 따라:
- 코드 에디터가 아닙니다. LSP, 자동 완성, 리팩터링, 디버거, git 거터 없음.
- "모든 일반 텍스트 형식"이 아닙니다. 범위가 제한되어 있습니다 — 위 표를 참조하세요.
- 기본적으로 HTML 스크립트 실행 없음. 신뢰된 HTML 미리 보기로 파일 하나를 명시적으로 허용하지 않는 한, 샌드박스 렌더만 지원합니다.
- v1 에서 Markdown 이 아닌 형식의 인쇄 / 내보내기 / HTML 로 복사 없음.
- 아직 코드 뷰어로 지원하지 않음: Zig, Swift, Kotlin, Java, Elixir, OCaml, 12개 확장자 집합 밖의 기타 언어. 선택 기준은 "직접 사용하는 언어" 입니다 — 추가를 원한다면 이슈를 등록해 주세요.
원하는 형식이 목록에 없고 명시적으로 비목표에 해당하지 않는다면, 이슈를 등록해 주세요.