통합 터미널
VMark에는 에디터를 떠나지 않고 명령을 실행할 수 있는 내장 터미널 패널이 포함되어 있습니다.
터미널 패널을 표시하거나 숨기려면 Ctrl + `를 누릅니다. 패널을 열면 캐럿이 셸로 이동하고, 닫으면 캐럿이 에디터로 돌아옵니다 — 따라서 마우스를 쓰지 않고도 패널에 들어가고 나올 수 있습니다.
패널을 숨기지 않고 에디터와 열려 있는 터미널 사이를 오가려면 Ctrl + Shift + `(터미널 또는 편집기에 포커스, Windows와 Linux에서는 Alt + Shift + `)를 누릅니다. 양방향으로 전환되며 패널의 표시 여부는 절대 바꾸지 않습니다 — 터미널이 숨겨져 있다면 아무것도 하지 않는 대신 터미널을 엽니다.
세션
터미널은 각각 자체 셸 프로세스를 가진 최대 5개의 동시 세션을 지원합니다. 오른쪽의 수직 탭 바에 번호가 매겨진 세션 탭이 표시됩니다.
| 동작 | 방법 |
|---|---|
| 새 세션 | + 버튼 클릭 |
| 세션 전환 | 탭 번호 클릭 |
| 세션 닫기 | 휴지통 아이콘 클릭 |
| 셸 재시작 | 재시작 아이콘 클릭 |
| 세션 이름 변경 | 탭을 더블 클릭하고 이름을 입력한 뒤 Enter (Escape로 취소) |
| 패널 위치 바꾸기 | 위치 바꾸기 아이콘(↕ / ↔)을 클릭하면 터미널이 현재 축의 반대쪽으로 이동합니다. 자동 모드에서는 화면 비율에 따른 스마트 전환(가로 → 측면, 세로 → 아래/위)이 유지되며, 반대쪽 끝을 선택할 뿐입니다. |
| 패널 최대화 | 크기 조정 핸들을 더블 클릭, 다시 더블 클릭하면 원래대로 |
마지막 세션을 닫으면 패널이 숨겨지지만 세션은 살아있습니다 — Ctrl + `로 다시 열면 이전 상태로 돌아갑니다. 셸이 정상 종료(exit 또는 Ctrl + D)되면 해당 탭이 자동으로 닫히고, 마지막 탭이었다면 패널도 숨겨집니다. 셸이 오류로 종료되면 탭은 종료 코드를 표시한 채 열려 있으며, 아무 키나 눌러 재시작할 수 있습니다.
세션을 닫으면 — 휴지통 아이콘으로, 창을 닫아서, 또는 VMark를 종료해서 — 셸뿐 아니라 그 안에서 시작된 모든 것이 종료됩니다. VMark는 셸의 프로세스 그룹 전체에 행업 신호(SIGHUP)를 보내고, 종료될 때까지 최대 1초를 기다린 다음, 남아 있는 것을 강제 종료(SIGKILL)합니다. 의도적으로 별도의 프로세스 그룹으로 분리한 작업(예: nohup이나 setsid 사용)은 영향을 받지 않습니다. Windows에는 행업 단계가 없으며, 셸이 즉시 종료됩니다.
알림: VMark 창에 포커스가 없을 때 그 창의 터미널이 벨을 울리면(예: Claude Code가 한 턴을 마쳤을 때), VMark는 창의 문서 이름을 담은 OS 알림을 표시합니다 — 따라서 여러 창에서 Claude Code를 실행하면서 각 창을 지켜보지 않아도 주의가 필요한 창에서 알림을 받을 수 있습니다. 설정 → 터미널 → 비활성 창일 때 알림 으로 켜고 끕니다(기본값은 켜짐, 처음 사용할 때 알림 권한을 요청). 같은 비활성 창 벨 신호는 창 상태 패널에도 해당 창을 표시하므로, 어느 창에 주의가 필요한지 보고 바로 이동할 수 있습니다.
각 탭은 실행 중인 프로그램의 제목(vim이나 ssh처럼 터미널 제목을 내보내는 도구가 설정)을 반영합니다. 단, 세션 이름을 직접 바꿨다면 직접 바꾼 이름이 항상 우선합니다. 이름을 바꾸려면 탭을 더블 클릭 하세요: Enter는 확정, Escape는 취소, 다른 곳을 클릭하면 입력한 내용이 유지됩니다. 빈 이름은 무시됩니다.
최대화: 에디터에 계속 접근할 수 있도록 패널 크기는 사용 가능한 공간의 80 %에서 멈추며, 크기 조정 핸들을 더블 클릭 하면 그 상한으로 맞춰집니다. 다시 더블 클릭하면 저장된 크기로 돌아갑니다. 이는 보기 전환일 뿐이며 설정한 크기는 절대 바꾸지 않습니다.
여기서 터미널 열기: 파일 탐색기에서 폴더를 오른쪽 클릭하고 여기서 터미널 열기 를 선택하면 그 디렉터리에서 세션이 시작됩니다. 다른 세션이 어디에 있든 새 세션은 그곳에서 열립니다. 세션이 다섯 개이면 이 항목은 비활성화됩니다.
터미널 세션과 워크스페이스 레일
워크스페이스 레일이 켜져 있으면 레일의 각 워크스페이스는 자체 터미널 세션 세트를 가집니다. 워크스페이스를 전환하면 보이는 터미널 탭이 바뀝니다 — 숨겨진 워크스페이스의 셸은 그대로 남습니다: 살아 있고, 작업 디렉터리도 같으며, 아무것도 입력되지 않습니다. 다시 전환하면 같은 셸이 다시 나타나고, 보고 있던 세션도 워크스페이스별로 기억됩니다.
- 새 세션은 생성될 때 활성이던 워크스페이스에 속하며, 그 워크스페이스의 루트에서 시작합니다.
- 5개 세션 제한과
Terminal 1…5번호는 보이는 세트에 적용됩니다 — 숨겨진 워크스페이스의 세션은 활성 워크스페이스의 여유분을 차지하지 않습니다. - 세션이 없는 워크스페이스에서 패널을 열면 자동으로 세션이 하나 만들어집니다. 워크스페이스가 없으면(또는 디렉터리를 정할 저장된 파일이 없으면) 대신 안내 문구가 표시됩니다.
- 레일에서 워크스페이스를 닫거나 별도의 창으로 옮기면 그 터미널 세션도 함께 닫힙니다.
- 레일이 꺼져 있으면 모든 것이 예전처럼 동작합니다: 창 전체에 하나의 세션 세트가 있고, 유휴 셸은 워크스페이스 전환을
cd로 따라갑니다.
키보드 단축키
터미널 패널이 포커스되어 있을 때 다음 단축키가 작동합니다:
| 동작 | 단축키 |
|---|---|
| 복사 | Mod + C (선택 시) |
| 붙여넣기 | Mod + V |
| 지우기 | Mod + K |
| 검색 | Mod + F |
| 줄 처음 / 끝 | Cmd + ← / Cmd + → (macOS) |
| 줄 삭제 | Cmd + ⌫ (macOS) |
| 터미널 글꼴 확대/축소 | Mod + = / Mod + - / Mod + 0 |
| 터미널 출력 모두 선택 | Mod + A |
| 세션 1 … 5로 전환 | Mod + 1 … Mod + 5 |
| 터미널 토글 | Ctrl + ` |
| 터미널 또는 편집기에 포커스 | Ctrl + Shift + ` |
| 이전 명령 프롬프트 | Mod + ↑ |
| 다음 명령 프롬프트 | Mod + ↓ |
터미널에 포커스가 있을 때 Mod + = / - / 0은 에디터 글꼴이 아니라 터미널 글꼴(터미널 설정에서 별도로 설정)을 확대/축소하고, Mod + F는 에디터의 찾기 막대 대신 터미널 검색을 엽니다.
프롬프트 이동(Mod + ↑ / Mod + ↓)에는 셸 통합이 필요합니다 — 아래 셸 통합을 참조하세요.
Linux: Ctrl + 문자 키는 셸로 전달되므로 Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + F, Ctrl + U, Ctrl + W 같은 readline 키를 다른 Linux 터미널처럼 사용할 수 있습니다. 터미널 자체의 문자 단축키는 Ctrl + Shift로 옮겨집니다: Ctrl + Shift + F 검색, Ctrl + Shift + K 지우기, Ctrl + Shift + A 전체 선택, Ctrl + Shift + C / Ctrl + Shift + V 복사와 붙여넣기. Ctrl + C는 선택 영역이 있으면 복사하고(없으면 SIGINT 전송) Ctrl + V는 그대로 붙여넣습니다. Ctrl + Insert / Shift + Insert로도 복사와 붙여넣기를 할 수 있습니다.
TIP
선택 없이 Mod + C를 사용하면 실행 중인 프로세스에 SIGINT를 보냅니다 — 일반 터미널에서 Ctrl+C를 누르는 것과 동일합니다.
기록을 보면서 입력하기
위로 스크롤해 이전 출력을 읽으면서 계속 입력할 수 있습니다. 화면 위치는 그대로 유지되고, 터미널 아래쪽에 플로팅 프롬프트가 나타나 입력 중인 줄(셸 프롬프트 또는 Claude Code 같은 TUI의 입력 상자)을 실시간으로 보여 줍니다. 키 입력은 여전히 셸로 전달되므로 Tab 자동 완성, 기록, 입력기가 평소처럼 동작합니다. 오른쪽 끝의 화살표를 클릭하면 프롬프트로 돌아가며, 프롬프트가 다시 보이면 자동으로 사라집니다. Enter나 Ctrl+C를 눌러도 프롬프트로 돌아가므로 명령(또는 TUI에 보낸 프롬프트)의 결과를 바로 볼 수 있습니다. Shift+Enter를 포함한 다른 키는 화면 위치를 바꾸지 않습니다. 전체 화면 프로그램(vim, less)에는 스크롤백이 없으므로 나타나지 않습니다.
검색
Mod + F를 눌러 검색 바를 엽니다. 입력하면 터미널 버퍼를 점진적으로 검색합니다.
| 동작 | 단축키 |
|---|---|
| 다음 일치 | Enter |
| 이전 일치 | Shift + Enter |
| 검색 닫기 | Escape |
검색 바는 입력란 옆에 찾은 결과를 표시합니다:
3 / 17— 17개 일치 항목 중 세 번째에 있습니다.5000개 일치— 일치 항목이 너무 많아 터미널이 어느 것이 활성인지 추적할 수 없으므로, 위치 없이 총수만 표시합니다.- 결과 없음 — 검색어와 일치하는 것이 없습니다. 입력 텍스트도 빨간색으로 바뀝니다.
입력란과 화살표 사이에 세 가지 토글이 있습니다:
| 토글 | 효과 |
|---|---|
| Aa | 대/소문자 구분 |
| ab | 단어 단위로 일치 |
| .* | 검색어를 정규식으로 처리 |
정규식 모드가 켜져 있을 때 입력 중인 패턴([a-z]를 입력하는 도중의 [)은 오류 대신 결과 없음으로 표시됩니다 — 계속 입력하세요. 토글은 검색 바를 닫거나 세션을 전환할 때마다 초기화됩니다.
컨텍스트 메뉴
터미널 안에서 오른쪽 클릭하여 접근합니다:
- 복사 — 선택한 텍스트 복사 (선택 없으면 비활성화)
- 줄바꿈 해제하고 복사 — 화면 너비 때문에 생긴 줄바꿈을 제거하고 선택 영역을 복사합니다. 일부 명령줄 프로그램(codex 및 기타 TUI 앱)은 실제 개행 문자를 넣어 출력을 터미널 너비에 맞춰 강제로 줄바꿈하며, 일반 복사는 그 줄바꿈을 그대로 유지합니다. "줄바꿈 해제하고 복사"는 줄바꿈된 줄을 다시 이어진 단락으로 합칩니다(빈 줄은 단락 구분으로 유지). CJK를 인식하므로 중국어/일본어 텍스트는 공백 없이 이어집니다. VMark는 줄바꿈 개행과 의도적인 개행을 구분할 수 없으므로, 하나의 논리적 흐름임을 알고 있는 블록을 선택하세요.
- 붙여넣기 — 클립보드에서 셸에 붙여넣기
- 모두 선택 — 전체 터미널 버퍼 선택
- 지우기 — 보이는 출력 지우기
- 디스플레이 재설정 — 터미널을 다시 칠하고 렌더링 캐시를 재설정합니다. 긴 세션 후 문자가 겹치거나, 대소문자가 섞이거나, 깨져서 렌더링되면 사용하세요 — 보통 스타일이 많이 적용된 CLI (예: Claude Code)를 몇 시간 동안 실행할 때 발생합니다. 같은 창의 터미널들은 하나의 글리프 캐시를 공유하므로, 활성 탭만이 아니라 창의 모든 터미널을 다시 칠합니다.
- 명령 출력 복사 — 명령 하나가 출력한 모든 내용을 프롬프트 줄과 다음 명령의 출력 없이 복사합니다. 명령 출력 안에서 오른쪽 클릭했고 셸 통합이 켜져 있을 때만 나타납니다. 각 명령이 어디서 시작하고 끝났는지를 VMark에 알려 주는 것이 셸 통합이기 때문입니다.
메뉴는 키보드로 완전히 탐색할 수 있습니다: 첫 번째 사용 가능한 항목에 포커스가 놓인 채 열리고, 화살표 키로 항목 사이를 이동하며(비활성 항목은 건너뜀), Home/End로 처음/끝으로 이동하고, Enter 또는 Space로 실행하며, Escape 또는 Tab으로 닫습니다.
코드 블록 실행
문서의 bash, sh, zsh, shell 펜스 — 또는 console, shell-session, shellsession, terminal 태그가 붙은 기록 펜스 — 위에 마우스를 올리면 복사 버튼 옆에 ▶ 터미널에서 실행 버튼이 나타납니다. 이 버튼은 블록을 터미널에 붙여넣고 — 필요하면 패널을 표시하고 세션을 시작한 뒤 — 거기서 멈춥니다.
붙여넣기만 하고 실행하지 않습니다
명령은 셸의 입력 줄에 놓일 뿐 절대 대신 실행되지 않습니다: 개행 문자가 추가되지 않으므로 여러분이 Enter를 누르기 전까지는 아무 일도 일어나지 않습니다. 먼저 무엇이 놓였는지 읽어 보세요 — 문서는 어디에서든 올 수 있고, 코드 펜스는 누군가 쓴 텍스트일 뿐입니다.
기록 펜스(console, shell-session, shellsession, terminal) — 붙여넣은 세션 — 의 경우 맨 앞의 $ , % , # 프롬프트를 제거하여 프롬프트가 아닌 명령을 얻게 합니다. bash 펜스에서는 이들이 소스 코드이므로 그대로 둡니다.
클릭 가능한 링크
터미널은 명령 출력에서 세 가지 유형의 링크를 감지합니다:
- 웹 URL — 클릭하면 기본 브라우저에서 열립니다
- OSC 8 하이퍼링크 —
ls --hyperlink=auto,gh, 최신 컴파일러 같은 도구가 출력하는 명시적인 터미널 하이퍼링크입니다. 표시되는 텍스트와 실제 URL이 다를 수 있으며, 클릭하면 해당 URL이 열립니다. - 파일 경로 —
/를 포함하고 파일 확장자로 끝나는 경로입니다. 클릭하면 에디터에서 파일이 열립니다 (:line:col접미사 지원. 상대 경로는 셸 통합이 셸의 현재 디렉터리를 알려 주면 그 디렉터리를, 그렇지 않으면 워크스페이스 루트를 기준으로 해결)
셸 환경
VMark는 모든 터미널 세션에서 다음 환경 변수를 설정합니다:
| 변수 | 값 |
|---|---|
TERM | xterm-256color |
TERM_PROGRAM | WezTerm |
TERM_PROGRAM_VERSION | 20240203-110809-5046fc22 |
VMARK_WORKSPACE | 워크스페이스 루트 경로 (폴더가 열려 있을 때) |
PATH | 전체 로그인 셸 PATH (시스템 터미널과 동일) |
COLORTERM | truecolor |
LC_CTYPE | UTF-8 — macOS 전용 |
TERM_PROGRAM이 vmark가 아니라 WezTerm을 보고하는 것은 의도된 것입니다. Claude Code의 /terminal-setup을 비롯한 여러 CLI 도구는 하드코딩된 허용 목록에 있는 터미널에서만 CSI u 키 인코딩을 켜고, 그 밖의 모든 터미널에는 기능이 축소된 "알 수 없는 터미널" 경로를 사용합니다. VMark는 그 프로토콜을 지원하므로, 동작이 가장 가까운 허용 목록의 터미널로 자신을 식별합니다. 이 값을 vmark로 바꾸면 그런 도구에서 Shift+Enter와 기타 수정자 키 시퀀스가 조용히 깨집니다. ADR-006을 참조하세요.
LC_CTYPE=UTF-8은 macOS에서만 설정됩니다. macOS에서 Dock이나 Spotlight로 실행한 GUI 앱은 환경을 거의 물려받지 못하므로, 이 설정이 없으면 셸이 C 로캘로 돌아가 도구들이 CJK 텍스트를 ?로 출력합니다. UTF-8이라는 이름만으로는 macOS에서는 로캘이지만 Linux에서는 로캘이 아니므로, Linux에서 이를 설정하면 멀쩡히 상속된 로캘을 잘못된 로캘로 바꾸게 됩니다 — setlocale()을 호출하는 모든 프로그램이 경고를 낼 것입니다. Linux와 Windows에서는 데스크톱 세션 자체의 LANG / LC_*가 그대로 상속됩니다.
VMark는 의도적으로 EDITOR를 설정하지 않습니다. git commit, crontab -e 등이 실행하는 것은 셸 설정이 내보내는 여러분 자신의 $EDITOR입니다. (VMark는 예전에 EDITOR=vmark를 강제했지만, vmark 명령줄 shim은 선택 사항이며 탭을 닫을 때까지 기다리지 않고 즉시 반환되므로, git commit이 "command not found" 또는 빈 커밋 메시지로 실패했습니다. 이를 작동시키려면 차단형 vmark --wait 프로토콜이 필요한데, 아직 만들어지지 않았습니다.)
통합 터미널은 로그인 셸의 PATH를 상속하므로 node, claude 등의 CLI 도구와 사용자가 설치한 바이너리를 일반 터미널 창에서와 동일하게 사용할 수 있습니다.
터미널 설정에서 셸을 선택하지 않으면 VMark는 로그인 셸을 시작합니다. 선택하는 셸은 VMark가 제공하는 것이어야 하며 절대 경로로 지정됩니다 — macOS와 Linux에서는 /etc/shells에 나열된 셸(또는 로그인 셸) 중 실제로 존재하고 실행 가능한 것, Windows에서는 PowerShell, pwsh, cmd.exe 또는 %COMSPEC%입니다. 저장된 선택이 더 이상 사용할 수 없게 되면 설정에 (사용 불가) 로 표시되고, VMark는 대신 기본 셸을 시작합니다. macOS와 Linux에서는 먼저 사용자 계정 항목에서 로그인 셸을 읽고, 그다음 $SHELL을 읽으며, 둘 다 없으면 /bin/sh를 사용합니다. Windows에서는 %COMSPEC%를 사용하며, 없으면 cmd.exe의 전체 경로를 사용합니다. 작업 디렉터리는 워크스페이스 루트, 활성 파일의 상위 디렉터리, 또는 $HOME에서 시작합니다.
Ctrl+R (zsh/bash의 역방향 기록 검색)과 같은 표준 셸 단축키는 터미널이 포커스되어 있을 때 작동합니다 — 에디터에 의해 가로채이지 않습니다.
터미널이 이미 실행 중일 때 워크스페이스 루트가 바뀌면 유휴 상태의 세션이 자동으로 새 루트로 cd합니다. 명령 (예: vim이나 less)을 실행 중인 세션은 중단되지 않으며, 명령이 끝난 뒤 디렉터리를 변경합니다. 이를 감지하려면 셸 통합이 필요합니다. 워크스페이스 레일이 켜져 있으면 워크스페이스에 속한 세션은 자체 디렉터리를 유지합니다.
macOS의 마이크, 카메라, Apple 이벤트
통합 터미널에서 실행한 프로그램은 마이크, 카메라 또는 다른 앱을 제어하는 권한(Apple 이벤트, osascript가 사용)을 요청할 수 있습니다. macOS는 VMark의 이름으로 묻습니다. 터미널이 시작하는 모든 프로그램에 대해 VMark를 책임 있는 앱으로 보기 때문입니다. macOS가 물으면 허용하세요. 나중에 시스템 설정 → 개인정보 보호 및 보안의 마이크, 카메라 또는 자동화에서 변경할 수 있습니다. 요청은 터미널을 열 때가 아니라 프로그램이 해당 리소스를 처음 사용할 때 발생합니다.
프로그램이 무음으로 녹음하거나, 검은 화면만 캡처하거나, "권한 없음" 오류를 내는데 요청 창이 나타나지 않는다면 해당 설정 페이지에서 VMark가 목록에 있고 허용되어 있는지 확인하세요. 문제를 보고할 때는 해당 프로그램의 출력을 함께 첨부하세요.
BlackHole 같은 가상 오디오 입력의 경우 권한만으로는 오디오가 라우팅되지 않습니다. 녹음 도구에서 원하는 입력을 선택하고 그 입력으로 오디오를 라우팅한 뒤, 긴 녹음 전에 짧은 녹음으로 확인하세요. 오디오 파일이 커지고 있다는 사실만으로는 소리가 녹음되었다고 볼 수 없습니다. VMark에는 녹음기나 전사 도구가 포함되어 있지 않으며, 그런 명령은 별도로 설치한 도구가 제공합니다.
아직 구현되지 않은 기능
다음 기능은 추적 중이지만 현재 제공되지 않습니다. 이 페이지의 이전 버전이 그중 일부를 제공되는 것처럼 설명했기 때문에 여기에 나열합니다:
- 세션 일시 중지 / 재개. VMark는 내부적으로 셸 프로세스를 일시 중지할 수 있습니다 — 출력이 터미널이 렌더링할 수 있는 속도보다 빠르게 들어올 때 흐름 제어로 자동으로 그렇게 합니다 — 하지만 사용자가 조작할 수 있는 컨트롤은 없으며, 그런 컨트롤을 둘 세션 탭 컨텍스트 메뉴도 없습니다.
$EDITOR가 VMark를 가리킬 수 있게 하는 차단형vmark --wait(위의 셸 환경 참조).- 재시작 후 스크롤백 유지 (지속성 참조).
- fish 셸 통합 (셸 통합 참조).
설정
설정 → 터미널 을 열어 구성합니다:
| 설정 | 범위 | 기본값 | 플랫폼 |
|---|---|---|---|
| 패널 크기 | 사용 가능한 공간의 10 % – 80 %, 5 % 단위 | 40 % | 모두 |
| 글꼴 크기 | 10 – 24 px | 13 px | 모두 |
| 줄 높이 | 1.0 – 2.0 | 1.2 | 모두 |
| 선택 시 복사 | 켜기 / 끄기 | 끄기 | 모두 |
| 대화 기록 자동 렌더링 | 켜기 / 끄기 | 끄기 | 모두 |
| Mac Option을 Meta로 | 켜기 / 끄기 | 켜기 | macOS |
| 셸 통합 | 켜기 / 끄기 | 켜기 | macOS / Linux (zsh, bash) |
| 원격 클립보드 (OSC 52) | 켜기 / 끄기 | 켜기 | 모두 |
| 스크롤백 | 1,000 / 5,000 / 10,000 / 50,000줄 | 5,000 | 모두 |
| 스크린 리더 모드 | 켜기 / 끄기 | 끄기 | 모두 |
대화 기록 자동 렌더링
대화 기록 자동 렌더링을 활성화하면 어시스턴트의 Markdown, 선택 가능한 표, Mermaid 다이어그램이 터미널 영역 안의 렌더링된 대화 기록 섹션에 표시됩니다. 터미널이 위쪽이나 아래쪽에 있으면 CLI의 오른쪽에, 왼쪽이나 오른쪽에 있으면 CLI 아래에 배치되며, 대화형 CLI는 그 옆에서 계속 사용할 수 있습니다.
이 섹션은 접힌 상태로 시작합니다. 새 응답에 표나 Mermaid 다이어그램이 포함되면 자동으로 열립니다 — 터미널이 이미 잘 표시하는 일반 텍스트 응답에서는 닫힌 상태로 유지됩니다. 터미널 탭 바의 차트 버튼(툴팁 렌더링된 대화 기록)을 클릭하면 언제든지 표시하거나 숨길 수 있습니다. 대화 기록이 표시되는 동안 버튼이 강조 표시되며, 숨기면 전체 영역이 다시 CLI에 돌아갑니다. 접은 뒤에는 표나 다이어그램이 포함된 다음 응답이 올 때까지 닫힌 상태로 유지됩니다. 세션이 처음 표시될 때 대화 기록에 이미 있던 내용으로는 열리지 않습니다. 숨겨진 터미널은 대화 기록 읽기를 중단합니다.
활성화하면 기존 훅을 유지한 채 Claude Code의 settings.json과 Codex의 hooks.json에 로컬 SessionStart 훅이 추가됩니다. 활성화한 후 VMark 터미널에서 Claude/Codex를 시작하거나 재개하세요. 이미 실행 중인 세션은 다시 시작하세요. Codex는 처음 실행할 때 새 훅을 신뢰할지 물어볼 수 있습니다. Node와 라이프사이클 훅을 지원하는 CLI 버전이 필요합니다. 명시적으로 비활성화되었거나 정책으로 제한된 훅, 원격 SSH 세션, VMark 환경과 다른 사용자 지정 CLI 구성 디렉터리에서는 연결을 설정할 수 없습니다.
각 터미널은 가장 최근에 수정된 대화 기록이 아니라 자신의 정확한 세션을 따라갑니다. 미리보기는 대화 기록 데이터의 마지막 2 MiB에서 최대 100개의 어시스턴트 메시지를 보관합니다. 원시 HTML과 원격 이미지는 동작하지 않는 상태로 유지되며, 잘못된 다이어그램은 소스 형태로 읽을 수 있게 남습니다. 비활성화하면 렌더링된 섹션이 제거되고 VMark가 설치한 훅이 비활성화됩니다.
접근성
| 설정 | 옵션 | 기본값 |
|---|---|---|
| 터미널 벨 | 끄기 / 시각적 / 소리 | 시각적 |
| 최소 대비 | 끄기 / WCAG AA (4.5:1) / WCAG AAA (7:1) / 최대 | WCAG AA (4.5:1) |
대부분의 변경 사항은 열려 있는 모든 세션에 즉시 적용됩니다 — 패널 크기와 위치, 글꼴 크기, 줄 높이, 커서, 선택 시 복사, Mac Option을 Meta로, 스크롤백, 스크린 리더 모드, 터미널 벨, 최소 대비. 셸, WebGL 렌더러(Linux에서는 사용 불가), 원격 클립보드, 셸 통합 은 세션이 시작될 때 고정되므로 그 이후에 여는 세션에 적용됩니다. 패널 크기 는 사용 가능한 공간의 80 %까지 늘릴 수 있습니다. 에디터는 픽셀 단위의 최소 크기를 유지하므로 터미널이 아무리 커져도 완전히 사라지지 않습니다. 크기 조정 핸들을 더블 클릭하면 저장된 크기를 바꾸지 않고 최대 크기로 바로 이동했다가 되돌아옵니다. Mac Option을 Meta로 는 통합 터미널에서 macOS Option 키를 Meta로 라우팅하여 emacs, tmux 및 유사한 도구가 Alt 접두사 단축키를 볼 수 있게 합니다(macOS 전용). 기본적으로 켜져 있으므로 Option+화살표는 악센트 문자를 입력하는 대신 단어 단위로 이동합니다. 셸 통합 은 macOS와 Linux에서 사용할 수 있습니다(Windows에서는 숨겨짐). 원격 클립보드 는 쓰기 전용이며(읽기는 항상 거부) 아래에서 설명합니다. 스크롤백 은 각 세션이 스크롤 기록에 보관하는 출력 줄 수를 정합니다 — 값이 클수록 메모리를 더 많이 사용합니다. 스크린 리더 모드 는 터미널 출력을 VoiceOver 같은 보조 기술에 노출합니다. 성능을 위해 기본적으로 꺼져 있습니다. 터미널 벨 은 벨(BEL)을 알리는 방식을 고릅니다 — 세션 탭의 시각적 백그라운드 활동 표시, 부드러운 비프음(백그라운드 세션의 탭에도 표시가 붙어 찾을 수 있음), 또는 없음. 최소 대비 는 흐린 터미널 텍스트를 배경 대비 읽을 수 있는 명암비까지 끌어올립니다. 접근성을 위해 높이거나, 끄기로 설정해 보정을 해제하세요.
터미널 글꼴
터미널은 자체 글꼴이 아니라 설정 → 에디터 의 고정폭 폰트 를 사용하므로, 거기서 바꾸면 코드 블록, 소스 모드, 터미널의 스타일이 함께 바뀝니다. Linux에서 시스템 기본값 옵션은 시스템 터미널이 사용하는 데스크톱 자체의 고정폭 글꼴을 따릅니다.
글꼴 크기와 확대/축소
터미널의 글꼴 크기는 의도적으로 에디터의 읽기 크기와 독립적입니다: 터미널은 밀도 높은 모니터링 화면이며, 13 px 기본값은 18 px 읽기 기본값이 아니라 독립 실행형 터미널들이 제공하는 값과 맞춘 것입니다. Mod + = / Mod + -는 2 px 단위로 확대/축소하므로, 터미널 글꼴이 드롭다운에 없는 값(13 → 15 → 17 …)이 될 수 있습니다. 드롭다운은 사전 설정 값으로 되돌리지 않고, 확대/축소된 값을 목록에 추가하여 실제로 적용 중인 크기를 표시합니다.
원격 클립보드 (OSC 52)
ssh 세션 안, tmux 안, 또는 원격 에디터에서 복사하면 텍스트가 원격 컴퓨터가 아니라 여러분의 클립보드에 들어옵니다. 프로그램은 OSC 52 이스케이프 시퀀스를 출력하여 이를 요청하고, VMark는 그것을 시스템 클립보드로 전달합니다.
# From anywhere the terminal can print — including over ssh:
printf '\e]52;c;%s\a' "$(printf 'hello' | base64)"쓰기만 허용 — 읽기는 항상 거부됩니다
OSC 52는 클립보드를 읽는 방법도 정의하지만, VMark는 이 설정이 켜져 있어도 절대 응답하지 않습니다. 터미널에 바이트를 출력할 수 있는 모든 프로세스가 — 여러분이 작성하지 않은 파일에 대한 cat을 포함해 — 요청할 수 있으며, 그 응답은 마치 여러분이 입력한 것처럼 도착하기 때문입니다. iTerm2와 VS Code도 같은 이유로 거부합니다. 이 설정은 쓰기를 제어하며, 읽기는 무조건 거부됩니다.
설정 → 터미널 → 원격 클립보드 (OSC 52) 를 끄면 이 채널이 완전히 닫힙니다. 변경 사항은 새로 생성된 세션에 적용됩니다.
셸 통합
셸 통합 이 켜져 있으면 VMark는 셸에 가벼운 명령 마커를 삽입하여 터미널이 각 명령의 시작과 끝을 알 수 있게 합니다. 이를 통해 다음이 가능해집니다:
- 프롬프트 이동 —
Cmd + ↑/Cmd + ↓로 스크롤백의 이전 / 다음 명령 프롬프트로 이동합니다. - 종료 상태 표시 — 얇은 여백 막대가 각 명령 줄을 초록색(성공) 또는 빨간색(실패)으로 표시합니다.
- 실시간 작업 디렉터리 추적 — 출력의 상대 파일 경로가 셸의 현재 디렉터리를 기준으로 해석되고, 새 터미널이 그곳에서 열립니다.
macOS와 Linux에서 zsh 와 bash 가 지원됩니다. 두 경우 모두 삽입은 비파괴적입니다 — 실제 설정 파일이 먼저 로드되고, VMark의 훅은 대체되지 않고 덧붙여지므로 프롬프트, 테마, 별칭은 그대로 유지됩니다.
| 셸 | VMark가 연결하는 방법 | 보존되는 것 |
|---|---|---|
| zsh | ZDOTDIR이 여러분의 설정을 로드하는 생성된 .zshrc를 가리키고, 그 뒤 add-zsh-hook으로 훅을 등록 | 사용자 지정 $ZDOTDIR이 존중됩니다: VMark는 로그인 셸에서 실제 값을 알아내어 $HOME만이 아니라 그곳의 .zshenv와 .zshrc를 로드합니다 |
| bash | bash --rcfile <generated>, 먼저 ~/.bashrc를 로드 | 기존 PROMPT_COMMAND와 기존 DEBUG 트랩을 모두 대체하지 않고 함께 구성 하므로 bash-preexec, direnv, atuin이 계속 작동합니다 |
터미널은 대화형 비로그인 셸을 실행하므로, 로그인 전용 파일(.zprofile, .bash_profile, .profile)은 두 셸 모두에서 범위 밖이며, 이는 일반 터미널 탭의 동작과 같습니다.
fish는 아직 통합되지 않았으며, 이 기능 없이 정상적으로 실행됩니다. 삽입을 완전히 끄려면 설정을 끄세요. 변경 사항은 새로 생성된 세션에 적용됩니다(적용하려면 터미널을 재시작하세요).
지속성
터미널 패널이 열려 있는지 여부는 핫 종료 재시작 후에도 저장되고 복원됩니다. 패널 크기는 패널 크기 설정 — 크기 조정 핸들을 드래그하면 갱신되는 창 대비 비율 — 이므로 설정과 함께 보관되어, 패널이 어느 쪽에 있든 모든 재시작 후에도 유지됩니다. 셸 프로세스 자체는 보존될 수 없습니다 — 재시작 시 각 세션에 대해 새 셸이 생성됩니다. 스크롤백도 보존되지 않습니다: 복원하려면 터미널을 거쳐 간 모든 것(API 키 포함)을 디스크에 기록해야 하므로, 그 문제를 먼저 해결하는 설계가 나올 때까지 의도적으로 남겨 두었습니다.