# 탐색기와 필터 왼쪽 활동 막대의 패널 넷(객체 탐색기 · 파일 검색 · 프로젝트 · 북마크 · 확장)은 같은 규칙을 씁니다. ## 필터 틀 | 토글 | 뜻 | |---|---| | `Aa` | 대소문자 구분 | | `ab` | 단어 단위 | | `(.*)` | 정규식(잘못된 식이면 틀이 빨개지고 아무것도 안 걸립니다) | | 폴더 체크(프로젝트만) | **경로 포함** — `폴더/이름` 경로에 일치(`crates/x` 같은 검색) | | 눈 · 점(프로젝트 틀 오른쪽) | 숨김 파일 · 점 파일(Windows) 표시 — 파일 대화상자와 같은 설정 | 토글이 전부 꺼져 있으면 공백으로 나눈 낱말을 **전부 포함**하는 항목(대소문자 무시)이 걸립니다. **한글은 조합 중에도 걸립니다** — 필터·찾기/바꾸기·파일 검색·북마크 필터 모두 IME가 글자를 완성하기 전의 "ㄱ"·"기"로 "가나"·"긴급"을 찾습니다(자모열 비교: "ㄱ" ⊂ 가 · "기" ⊂ 긴 · "달" ⊂ 닭). 정규식 모드는 글자 그대로입니다. ### 프로젝트 필터는 뒤에서 열거합니다 필터에 글을 넣으면 아직 펼치지 않은 폴더도 이름을 찾으려고 열거하는데, 이 일은 **워커 스레드**(설정 Project ▸ 필터 열거 스레드 수 · 기본 4)가 폴더 단위로 나눠 **병렬로** 하고, 결과는 도착하는 대로 트리에 합쳐집니다 — 키 입력이나 화면이 멈추지 않고, 폴더·파일이 많아도(예: Downloads 1만 개) 끝까지 갑니다. 열거하는 동안 목록 아래에 "열거 중… 폴더 N개"가 보이고, 글을 바꾸면 이전 열거는 취소되고 새로 시작합니다(이미 읽은 폴더는 다시 읽지 않습니다). 읽지 못한 폴더(권한 · 사라짐)는 "읽지 못한 폴더 N개"로 세어지고 **로그 창**에 경로와 이유가 남습니다(워커가 여럿이어도 한 줄로 병합). `project.scan_max`(기본 0 = 무제한)는 트리에 담는 항목 수의 **메모리 보호용 상한**입니다. 0이 아니면 그 수에서 열거를 멈추고 "N개에서 열거를 멈췄습니다"가 뜹니다 — 그 뒤의 파일은 보지 못했으므로 "일치 없음"이 곧 "없음"은 아닙니다. ## 타입어헤드 — 글자를 치면 그 이름으로 목록에 포커스가 있을 때(필터 상자가 아니라 목록을 클릭한 상태) 글자를 치면 그 글자로 **시작하는 항목**으로 바로 이동합니다. 객체 탐색기 · 프로젝트 탐색기 · 북마크 · 아웃라인 네 곳이 같은 규칙입니다. | 키 | 동작 | |---|---| | 글자 | 접두를 이어 붙여 첫 일치 항목으로(잠시 멈추면 접두가 비워짐 · `explorer.typeahead_timeout`) | | ↑ / ↓ | 접두를 치는 중이면 **일치하는 것들 사이**를 순환 · 아니면 한 줄씩 | | Backspace | 접두 한 글자 지우기 | | Esc | 접두 지우기 | - 치는 중인 접두는 패널 모서리 작은 상자에 보입니다(위치 = `explorer.typeahead_pos`). - **한글**: 목록에 포커스가 있으면 입력기(IME) 대신 앱이 한글을 조합합니다. Windows는 **한/영 키**로 모드를 바꾸고 자판 글자가 자모로 바뀝니다. 필터 상자를 클릭하면 입력기가 다시 켜집니다. - 프로젝트 탐색기는 **OPEN FILES와 트리를 한 목록**으로 봅니다 — ↑/↓가 이어지고, OPEN FILES 항목에서 Enter/Space = 그 탭으로. - 설정 `explorer.typeahead*`(켜기 · 시간 · 공백·특수문자 허용 · 표시 위치) 한 벌을 네 곳이 같이 씁니다. ## 객체 상세 패널 객체 탐색기 아래의 한 줄(종류 칩 + 설명)입니다. **▲를 눌러 펼치면** 속성·컬럼·인덱스 같은 상세가 보이고, 글꼴·크기는 객체 탐색기와 같습니다. - 접힌 동안은 설명(코멘트)만 씁니다 — 목록을 빠르게 훑어도 서버에 상세를 묻지 않습니다. - 펼치는 순간 상세를 채웁니다. 한 번 본 객체는 기억해 둔 것을 **바로** 보이고, 새로 고침(F5 · 우클릭 Refresh)한 범위나 오래된 것만 다시 읽습니다. ## 파일 검색 범위와 결과 범위 상자가 비어 있으면 **작업 모드**에 따라 검색합니다: 파일 모드 = 열린 파일만 · 폴더 모드(`nexa-sql <폴더>`) = 열린 파일 + 그 폴더 이하 · 프로젝트 모드 = 열린 파일 + 프로젝트 파일이 있는 폴더 + 프로젝트에 추가한 폴더. ``(활성 파일의 폴더) · `` · 경로 · `-*.log`(제외)를 콤마로 적으면 그대로 씁니다. 결과 행을 **한 번 클릭하면 미리보기 탭**(흐린 탭 줄 · 편집하면 정식 탭)으로 열어 그 줄을 선택하고 포커스는 패널에 남습니다(↑/↓로 계속 훑기). **더블클릭 · Enter = 정식 탭** + 편집기 포커스. 이미 열린 탭의 결과는 그 탭으로 갑니다. 파일 행의 셰브론은 프로젝트 탐색기와 같습니다. ## 선택 규칙 - 빈 곳을 클릭하면 선택이 풀리고 마지막 행에 **테두리만** 남습니다 → ↑/↓는 그 행에서 시작합니다. 파일 대화상자도 같습니다(폴더 고르기에서 선택을 풀고 [폴더 선택] = 지금 폴더). - 셰브론은 글꼴 높이의 `›`/`∨`(펼침·머묾 = 본문색) · 읽어서 빈 폴더는 셰브론 없음. ## 객체 탐색기 루트 아이콘 서버 유형별 아이콘 = 원통 틀 + **대표색 테두리**(Oracle 빨강 등) + 이름(`ORA/CLE` · `MS/SQL` · `PG/SQL` · `MY/SQL` · `SQL/ITE` · `TIB/ERO` …). 파일은 `crates/nexa-sql/assets/dbms/*.svg`이고 나중에 실제 로고로 바꿔도 같은 로더가 그립니다. 모르는 DBMS는 generic 틀 + 프로필 이름의 두 글자. ## 편집기 탭 색 탭 위쪽 줄 색이 탭 구분을 말합니다 — **미저장 탭**(파일이 아닌 스크립트 · 저장 뒤 바뀐 파일) = 경고색 · **저장된 파일 탭** = 강조색 · **미리보기 탭** = 흐린 색. 미저장 탭은 **탭 이름 글자에도** 같은 색이 입혀져, 활성 탭이 아니거나 창에 포커스가 없어도 구분됩니다. | 키 | 기본 | 뜻 | |---|---|---| | `editor.tab_line_unsaved` · `editor.tab_line_file` · `editor.tab_line_preview` | 빈 값 | 구분별 줄 색(`#RRGGBB` · 빈 값 = 위 기본색) | | `editor.tab_unsaved_text` | on | 미저장 탭 이름에 색 | | `editor.tab_unsaved_color` | 빈 값 | 미저장 탭 이름 색(빈 값 = 미저장 줄 색) | 탭 우클릭 메뉴도 구분에 따라 다릅니다(미리보기 = Keep Open · 이름 바꾸기 = 스크립트만 · 파일 위치 열기/프로젝트 탐색기에서 보기 = 파일). ## 검색 상자의 최근 검색어 찾기/바꾸기(Ctrl+F · Ctrl+H) · 파일 검색(검색어 · 범위) · 프로젝트/북마크/확장/아웃라인 필터 · 설정 창 검색 — 상자마다 최근 검색어를 **최대 N개**(설정 Files ▸ 검색 상자별 최근 검색어 수 · 기본 20 · 0 = 끔) 기억합니다. **보기 방식**(설정 Files ▸ 검색어 이력 보기 방식 · 기본 **드롭다운**): 상자를 클릭하면 아래에 최근 검색어가 목록(기본 5행 · 설정 "드롭다운 행 수" · 넘치면 오른쪽 스크롤 표시 + 휠)으로 뜹니다. ↑/↓/PgUp/PgDn/Home/End로 옮기고 Enter 또는 클릭으로 넣습니다 · 글자를 치면 그 글이 든 항목만 남습니다 · Esc = 닫기 · 바깥 클릭 = 닫고 그 클릭 진행. **플랫**으로 바꾸면 목록 없이 상자 안에서 **↑** = 최근 것부터 오래된 쪽 · **↓** = 새로운 쪽 → 끝에서 치던 글로 복귀(Sublime·VS Code 찾기 상자와 같음). **목록으로 넘어가기**: 드롭다운의 마지막 항목(플랫이면 치던 글)에서 ↓를 한 번 더 누르거나 **Tab**을 누르면 상자 아래 목록(프로젝트 폴더 · 북마크 · 심볼 · 검색 결과 · 설정 분류 트리)의 첫 행으로 포커스가 옮겨집니다. 기록되는 때 = Enter로 찾기/검색을 실행할 때 · 필터 상자는 글을 넣고 다른 곳을 클릭할 때(포커스를 잃을 때). 같은 글은 앞으로 옮겨지고 중복은 없습니다. 이력은 **프로그램 전역**(프로젝트·폴더와 무관)으로 사용자 설정 폴더의 `search-history.json`에 저장되어 다시 켜도 남습니다. ## 파일 검색의 제외 로그 파일 검색은 크기 상한(설정 `search.max_file_kb` · 기본 1 MB)을 넘는 파일 · 이진 파일(첫 8 KB에 NUL) · 읽지 못한 파일 · 이름이 UTF-8이 아닌 파일을 **건너뛰고**, 결과 아래 **"Skipped (N)"** 행에 모아 둡니다(클릭 = 경로 — 이유 펼침 · 상태줄 끝 "· N skipped"). 워커 여럿이 병렬로 검색해도 로그는 한 줄로 병합돼 도착 순으로 보입니다. CLI `nsql grep`은 끝에 `skipped N file(s): too_large 2 · binary 3` 요약을 stderr로 내고, `NSQL_GREP_LOG=1`이면 파일 목록까지 냅니다. ## 검색 입력란의 × 지우기 찾기/바꾸기 · 파일 검색(검색어 · 범위) · 프로젝트/북마크/확장/아웃라인 필터 · 접속 창 필터 · 설정 검색 · 트랜잭션 로그 검색 · 명령 팔레트 — 글을 넣으면 상자 오른쪽 끝에 **×**가 나타나고, 클릭하면 글이 비워지며 목록·찾기가 바로 원래대로 돌아옵니다. 빈 상자에는 보이지 않습니다. ## 파일 검색 범위에 조건 넣기 범위 상자 한 줄에 조건을 **콤마로** 잇습니다 — 경로(`D:\proj`) · `` · **포함** `*.sql`(글롭 · `+pat`도 같음) · **제외** `-*.log`. 포함이 하나라도 있으면 그중 하나에 맞는 파일만(OR) 읽고, 제외에 걸리면 뺍니다(AND NOT). 폴더는 늘 내려가므로 폴더를 빼려면 `-폴더/`. 패턴만 적고 경로가 없으면 기본 범위(열린 탭 + 작업 모드 폴더)에 패턴만 얹습니다. 예: `*.sql, *.txt, -*_test.sql, D:\proj` = D:\proj 아래 `.sql`·`.txt` 중 `_test.sql`이 아닌 파일. 글롭은 `.gitignore`와 같은 문법(`*` `**` `?`). CLI는 `nsql grep SELECT D:\proj -g *.sql -g *.txt --exclude *_test.sql`.