코드 모드
코드 모드의 편집기, 오른쪽 패널의 탐색기(파일 트리 · 이름 찾기 · 내용 찾기와 바꾸기)와 소스 제어(git 변경 목록), 아래쪽 패널의 터미널 · 문제 · 로그를 실제 화면 문구로 설명합니다.
목차
코드 모드는 열려 있는 프로젝트 폴더의 파일을 보고 고치는 화면입니다. 가운데에 편집기, 오른쪽에 탐색기 · 소스 제어 · 「작업」 탭, 아래쪽에 터미널 · 문제 · 검증 로그 · 디버그 로그가 있습니다. 이 쪽은 영역마다 무엇을 할 수 있는지를 설명하고, 영역의 배치와 메뉴 · 단축키는 화면 구성에 있습니다. 앱을 실행해 보는 법은 실행과 프리뷰에 있습니다.
참고
이 쪽의 배지가 「일부」인 이유입니다. 오른쪽 패널의 「작업」 탭과 아래쪽 패널의 「검증 로그」는 화면에 자리만 있고 앱 기능에 연결되어 있지 않아 항상 비어 있습니다(준비 중인 기능). 또 「문제」 목록은 컴퓨터에서 dart 를 실행할 수 있어야 채워집니다.
파일 열기와 편집기
파일은 탐색기의 트리 · 이름 찾기 결과 · 내용 찾기 결과, 소스 제어의 변경 목록, 문제 목록에서 고르면 가운데 편집기에 탭으로 열립니다. 폴더를 누르면 펼치거나 접습니다. 열린 파일이 없으면 「열린 파일 없음」과 「오른쪽 탐색기에서 파일을 고르면 여기에 열립니다」, 「파일 열기…」 단추가 보입니다.
- 탭: 파일 종류 아이콘 · 이름 · 닫기 단추가 있습니다. 저장하지 않은 편집이 있으면
●가, 파일이 디스크에서 바뀌었으면⟳가 붙습니다. - 나누기: 탭을 편집기 본문의 가장자리로 끌어 놓으면 그쪽에 새 편집 그룹이 생기고, 본문 가운데에 놓으면 그 그룹으로 옮겨집니다. 탭 줄 안에서 끌면 순서가 바뀝니다. 메뉴의 「오른쪽으로 분할」로도 나눕니다(메뉴와 단축키).
- 저장: 메뉴의 「저장」 · 「모두 저장」이 있습니다. 단축키는 macOS 의 시스템 메뉴와 macOS · Windows 의 편집기 안에만 있고 Linux 에는 없습니다(메뉴와 단축키).
밖에서 파일이 바뀌었을 때
열어 둔 파일이 터미널이나 다른 도구에 의해 디스크에서 바뀌면 앱이 감지합니다. 처리는 저장하지 않은 편집이 있는지에 따라 갈립니다.
| 상황 | 저장하지 않은 편집 | 처리 |
|---|---|---|
| 내용이 바뀜 | 없음 | 배너 없이 조용히 디스크 내용으로 다시 읽습니다 |
| 내용이 바뀜 | 있음 | 덮어쓰지 않고 본문 위에 「디스크에서 바뀌었습니다」 배너를 띄웁니다 |
| 파일이 삭제되거나 이름이 바뀜 | 무관 | 편집 내용을 그대로 둔 채 「디스크에서 삭제되었습니다」 또는 「디스크에서 이름이 바뀌었습니다」 배너만 띄우고 탭을 닫지 않습니다 |
바뀐 파일에 편집이 있을 때의 배너에는 두 단추가 있습니다. 「디스크에서 다시 읽기」는 내 편집을 버리고 디스크 내용으로 바꿉니다. 「내 편집 유지」는 내 편집을 그대로 두고 표시를 거둡니다. 다시 읽기에 실패하면 배너에 「다시 읽지 못했습니다: 사유」가 붙고 편집은 그대로 남습니다. 삭제 · 이름 변경 배너에는 읽을 파일이 없으므로 「디스크에서 다시 읽기」가 없고 「내 편집 유지」만 있습니다.
그 밖의 배너와 안내는 다음과 같습니다.
| 보이는 것 | 뜻 |
|---|---|
| 저장 실패: 사유 + 「다시 시도」 | 저장하지 못했습니다. 탭은 저장되지 않은 채로 남습니다 |
| 파일을 읽을 수 없습니다 | 본문 자리에 읽지 못한 사유가 나옵니다 |
탐색기
오른쪽 패널의 첫 탭입니다. 탭 아이콘에 마우스를 올리면 「탐색기 (⌘⇧E)」라고 나오지만, 그 단축키는 macOS 시스템 메뉴의 「탐색 보기」에만 있습니다. 열린 프로젝트가 없으면 「워크스페이스 없음」과 「폴더 열기…」 단추가 보입니다.
머리에는 프로젝트 폴더 이름과 아이콘 단추 셋이 있습니다. 「모두 접기」는 펼친 폴더를 모두 접고, 「새로 고침」은 트리 · 파일 목록 · git 상태를 다시 읽고, 「더 보기」 메뉴의 「파일 추가…」는 운영체제의 파일 선택기로 고른 파일을 선택한 항목이 있는 폴더(선택한 것이 없으면 프로젝트 루트)에 넣습니다. 그 아래에 찾기 입력과 「이름」 | 「내용」 전환이 있습니다.
파일 트리
폴더는 펼칠 때 비로소 그 안을 읽습니다. 트리에는 git 이 무시하는 파일이 나오지 않고 앱이 만든 .cocode/ 폴더도 가려집니다. 프로젝트가 git 저장소가 아니면 프로젝트 루트의 .gitignore 만 따르고, git 저장소인데 git 을 실행하지 못하면 「git 판정 불가 — 루트 .gitignore 규칙만 적용됩니다」 안내가 뜹니다. 같은 규칙이 이름 찾기와 내용 찾기에도 적용됩니다. git 이 알려 주는 변경은 행 끝의 한 글자 배지로 보입니다.
| 배지 | 뜻 |
|---|---|
| M | 수정됨 |
| A | 추가됨 |
| D | 삭제됨 |
| U | 추적 안 함(git 이 아직 모르는 새 파일) |
| ! | 충돌 |
| • | (폴더) 안에 변경이 있음 |
트리에서 할 수 있는 일은 다음과 같습니다.
- 열기: 파일을 누르거나, 화살표 키로 옮긴 항목에서 Space 또는 Enter 를 누릅니다. 화살표 키로 이동하고 폴더를 펼치고 접습니다. macOS 에서는 ⌘ + ↓ 가 파일을 열고 편집기로 초점을 옮깁니다.
- 이름 바꾸기: 항목을 두 번 누르거나, F2, 이미 선택된 항목에서 한 번 더 Enter, 오른쪽 클릭 메뉴의 「이름 바꾸기」. 디스크의 파일 이름이 실제로 바뀌고, 열려 있던 탭은 새 이름으로 이어집니다.
- 옮기기와 순서 바꾸기: 항목을 다른 폴더로 끌어 놓으면 파일이 실제로 이동합니다. 같은 폴더 안에서 끌면 파일은 그대로 두고 표시 순서만 저장됩니다. 운영체제의 파일을 폴더로 끌어 놓으면 그 폴더에 복사해 넣습니다.
결과는 「이름」 보기에서 탐색기 위쪽 배너로 알려 줍니다(예: 「<이름> → <새 이름> 이름 바뀜」 · 「<폴더>에 N개 파일 추가됨」). 실패하면 「이름을 바꾸지 못했습니다: …」 · 「이동하지 못했습니다: …」처럼 사유가 붙습니다.
주의
이름 바꾸기 · 이동 · 파일 추가는 디스크의 실제 파일을 바꾸고 확인을 묻지 않습니다. 같은 이름이 이미 있으면 거부하고 덮어쓰지 않습니다. 앱 안에서 이 동작을 되돌리는 기능은 없습니다. 같은 폴더 안의 순서 바꾸기만 파일을 건드리지 않습니다.
이름으로 찾기
찾기 입력(「파일 찾기」)에 글자를 쓰면 트리 대신 이름이 맞는 파일 목록이 나옵니다. 대소문자를 가리지 않고 부분 문자열로 맞춥니다. 이름이 같은 것, 이름이 그 글자로 시작하는 것, 이름에 든 것, 경로에 든 것 순으로 놓이고 같은 순위에서는 짧은 경로가 앞입니다. 한 번에 200개까지 보여 주고, 더 맞으면 「N개 중 처음 200개 — 이름을 더 적어 좁혀 보세요」라고 알립니다. Enter 는 가장 잘 맞는 파일을 엽니다. 맞는 파일이 없으면 「이름이 맞는 파일 없음」과 「내용에서 찾기」 단추가 나옵니다. 접힌 폴더 안의 파일도 찾습니다.
내용으로 찾기와 바꾸기
「내용」으로 전환하면 입력창 안내가 「내용 찾기」로 바뀌고 같은 글자를 파일 내용에서 찾습니다. 글자를 쓰는 것만으로는 검색하지 않고, Enter 나 입력 안쪽 오른쪽의 「검색」 단추로 시작합니다. 도는 동안은 「검색 중지」로 바뀌고, 중지해도 그때까지의 결과는 남습니다.
| 조절 | 하는 일 |
|---|---|
| 「대소문자 구분」 · 「단어 단위로」 · 「정규식」 | 입력 안쪽의 토글입니다. 정규식이 잘못되면 입력 아래에 「정규식 오류: …」가 나옵니다 |
| 「제외할 파일 — 예: *.g.dart, build/」 | 검색에서 뺄 파일 패턴입니다. Enter 로 검색을 시작합니다 |
| 「바꾸기」 · 「대소문자 보존」 · 「모두 바꾸기」 | 바꿀 글자를 쓰고 「모두 바꾸기」를 누릅니다. 입력 왼쪽의 펼침 단추(「바꾸기 숨기기」 · 「바꾸기 보이기」)로 바꾸기 줄을 접거나 펼칩니다 |
결과는 파일별로 묶여 「N건」과 함께 나오고, 하나를 누르면 그 자리로 파일이 열립니다. 요약 줄에는 건수 · 파일 수가 나오고, 바이너리라서 건너뛴 파일과 제외 패턴으로 뺀 파일이 있으면 그 수도 함께 나옵니다. 맞는 것이 없으면 「일치 없음」입니다.
주의
「모두 바꾸기」는 확인을 묻지 않고 바로 저장합니다. 검색 결과가 걸친 모든 파일에서 글자를 바꾸고 곧바로 디스크에 저장합니다. 검색이 끝나 결과가 있을 때만 눌러지고, 바뀌는 파일은 편집기 탭으로 열립니다. 지금 편집기에 열려 있는 내용(저장하지 않은 편집 포함)이 기준이고, 바꾼 글자는 $1 같은 역참조를 해석하지 않고 쓴 그대로 들어갑니다. 되돌리려면 각 파일의 편집기에서 실행 취소를 쓰세요(그 뒤 저장해야 디스크에도 반영됩니다). 저장하지 못한 파일이 있으면 패널 위에 「저장하지 못한 파일이 있습니다」가 파일별 사유와 함께 뜨고, 그 파일의 바뀐 내용은 저장되지 않은 채 편집기에 남습니다.
소스 제어
오른쪽 패널의 둘째 탭입니다. 프로젝트의 git 작업 트리 변경 목록을 보기만 합니다. 스테이징 · 커밋 · 되돌리기는 없으므로 그런 작업은 터미널에서 합니다. 탭 아이콘에는 변경 수가 붙습니다(99개를 넘으면 「99+」).
- 제목은 「변경 사항 N」이고 오른쪽 「새로 고침」으로 다시 읽습니다. 이 탭을 고를 때마다 다시 읽기 때문에 터미널에서 커밋하거나 체크아웃한 뒤에 탭을 다시 누르면 반영됩니다.
- 행마다 파일 아이콘 · 이름 · 폴더 · 위 표의 한 글자 배지가 있습니다. 파일을 누르면 편집기에 엽니다. 삭제된 파일은 줄이 그어져 있고 열 수 없습니다. 이름 변경은 옛 경로의 삭제와 새 경로의 추가로 보이고, git 에 알리지 않고 옮겼다면 새 경로는 추적 안 함(U)으로 보입니다.
- 목록 대신 안내가 나오는 경우가 셋 있습니다.
| 안내 | 뜻 | 단추 |
|---|---|---|
| git 저장소가 아닙니다 | 프로젝트 루트에 .git 이 없습니다. 상위 폴더가 git 저장소여도 따라 올라가지 않습니다 |
다시 확인 |
| git 을 실행할 수 없습니다 | git 을 실행하지 못했습니다. 사유가 아래에 나옵니다 |
다시 시도 |
| 변경 사항 없음 | 작업 트리가 마지막 커밋과 같습니다 | 새로 고침 |
터미널
아래쪽 패널의 첫 탭입니다. 앱이 터미널을 저절로 띄우지는 않습니다. 세션이 없으면 「터미널 없음」과 「세션을 열면 여기에 출력이 표시됩니다」, 「새 터미널」 단추가 보이고, 탭 줄의 「+ 새 터미널」로도 엽니다.
- 셸: 프로젝트 폴더에서 셸이 열리고, macOS · Linux 의 셸은(sh · bash · zsh · fish · ksh · dash 계열이면) 로그인 셸(
-l)로 시작합니다. 환경 변수SHELL의 셸을 쓰고 없으면 macOS 는/bin/zsh, Linux 는/bin/bash를 씁니다. Windows 는 PowerShell(pwsh.exe, 없으면 Windows PowerShell)을 쓰고 둘 다 없으면cmd.exe를 씁니다. 탭 이름은 「셸 1」처럼 번호가 붙고, 셸이 알려 주는 제목의 마지막 경로 조각이 뒤에 붙습니다. - 탭 줄: 탭마다 상태 점이 있습니다(시작 중 · 실행 중 · 종료됨 · 실패). 끝난 세션의 탭 이름 뒤에는 「(종료 N)」이 붙고, 출력은 탭을 닫기 전까지 남습니다. 도는 셸에는 「■ 터미널 종료」가 있어서 세션을 끝내도 탭과 출력은 남고, 탭의 닫기 단추는 도는 세션이면 끝낸 뒤 닫습니다.
- 키 입력: 앱이 터미널에 명령을 대신 쳐 주지 않습니다. 키는 모두 내가 누릅니다.
- 열지 못했을 때: 「터미널을 열 수 없습니다」와 사유가 그 탭 자리에 남습니다.
- 보관하는 출력의 양은 설정의 터미널에서 정합니다.
참고
터미널과 「▶」 실행은 앱이 가진 환경 변수를 모두 물려받지 않습니다. 앱은 PATH · HOME · LANG · 임시 폴더 · 프록시 변수 같은 허용 목록의 변수만 넘기고, ANTHROPIC_API_KEY 같은 키 환경 변수는 넘기지 않습니다. 그래서 설정 화면이 읽는 키가 터미널 안에서는 보이지 않을 수 있습니다. 셸은 자기 프로필(.zshrc 등)을 읽어 PATH 를 복원하므로 프로필에 쓴 설정은 터미널 안에서 그대로 적용됩니다.
문제
아래쪽 패널의 둘째 탭입니다. 프로젝트를 열면 앱이 dart language-server 를 띄우고, 그 Dart 언어 서버가 보낸 진단이 목록으로 나옵니다. 오류나 경고가 있으면 탭 이름에 개수가 붙습니다(「문제 3」). 정보와 힌트는 세지 않습니다.
- 상태 줄: 목록 맨 위에 「시작 중」 · 「실행 중」 · 「없음 — 사유」 · 「종료됨(코드 N)」 가운데 하나가 나오고 「언어 서버 다시 시작」 단추가 있습니다. 서버는 죽어도 저절로 다시 뜨지 않으므로 이 단추가 유일한 길입니다. 다시 시작에 실패하면 「다시 시작 실패: 사유」가 같은 자리에 남습니다. 「없음」은
dart를 실행하지 못한 경우입니다. - 목록: 「Σ 전체 N」 옆에 오류(⛔) · 경고(⚠) · 정보(ℹ) · 힌트(·)의 개수가 든 단추가 있어서 눌러 종류별로 거릅니다. 「전체 보기」는 거른 것을 모두 되돌립니다. 행을 누르면 그 파일의 해당 자리가 편집기에 열립니다.
- 빠른 수정: 행을 고르면 「빠른 수정」 영역이 나옵니다. 「제안 조회」로 언어 서버에게 수정 제안을 묻고, 나온 제안을 눌러 적용합니다. 적용해도 파일은 자동 저장되지 않습니다.
- 진단이 없으면 「문제 없음」과 「Dart 언어 서버가 보낸 진단이 여기에 표시됩니다」가 보입니다.
로그
- 디버그 로그: 채팅에서 확인한 계획을 실행하는 동안 cob 가 낸 출력입니다. 실행하면 열린 채로 나타납니다. 본문 검색(「로그 본문 검색」)과 단계 · 출처 필터, 「필터 초기화」가 있습니다. 「최신 로그」 단추는 맨 아래의 최신 줄로 옮겨 가 따라가기를 켭니다(따라가는 중에는 「최신 로그 · 추적 중」). 가장 최근 실행 하나만 담습니다. 보관 한도와 읽는 법은 실행 결과와 게시에 있습니다.
- 검증 로그: 자리만 있습니다. 「선택된 작업 없음」과 그 아래 설명 한 줄만 보이고, 계획 실행의 「검증」 단계 출력은 여기가 아니라 「디버그 로그」에 나옵니다.
자주 겪는 문제
탐색기에 있어야 할 파일이 보이지 않습니다
git 이 무시하는 파일(build/, 생성 파일 등)은 트리 · 이름 찾기 · 내용 찾기에 나오지 않습니다. 터미널에서 git status --ignored 로 확인해 보세요. 터미널에서 방금 만든 파일이 안 보이면 탐색기 머리의 「새로 고침」을 누르세요. 앱은 트리를 파일 감시로 따라가지 않습니다.
소스 제어에 「git 저장소가 아닙니다」가 뜹니다
앱은 열린 프로젝트의 루트에 .git 이 있을 때만 git 저장소로 봅니다. git 저장소의 하위 폴더를 프로젝트로 열었다면 상위 저장소를 찾아 올라가지 않으므로 이 안내가 뜹니다. 저장소 루트를 프로젝트로 여세요. 채팅으로 만든 새 프로젝트에는 만들어진 직후에 .git 이 없으니 이 안내가 먼저 보일 수 있습니다(실행 결과와 게시의 Git 저장소 경고).
「문제」에 「없음」이 뜨고 목록이 비어 있습니다
언어 서버를 띄우는 dart 를 앱이 찾지 못한 것입니다. 사유가 「없음 —」 뒤에 나옵니다. dart 가 앱이 읽은 PATH 에 있는지 확인한 뒤 「언어 서버 다시 시작」을 누르세요(준비물).
다음 단계
「▶」 단추와 프리뷰는 실행과 프리뷰로 이어서 보세요.