# VS Code 빠른 참조

*내비게이션, 편집, 멀티커서, 터미널, 디버깅, 확장*

> Source: VS Code Documentation (code.visualstudio.com/docs) · MIT

## 내비게이션

### 파일 및 심볼 내비게이션

| Command | Description |
|---------|-------------|
| `Ctrl+P` | 파일 이름으로 빠른 열기 |
| `Ctrl+Shift+P` | 명령 팔레트 |
| `Ctrl+Shift+O` | 파일 내 심볼로 이동 |
| `Ctrl+T` | 워크스페이스 내 심볼로 이동 |
| `Ctrl+G` | 줄 번호로 이동 |
| `F12` | 정의로 이동 |
| `Alt+F12` | 정의 미리보기 |
| `Shift+F12` | 모든 참조 찾기 |
| `Ctrl+Shift+\` | 대응하는 괄호로 이동 |

### 탭 및 에디터 내비게이션

| Command | Description |
|---------|-------------|
| `Ctrl+Tab` | 열린 탭 순환 |
| `Ctrl+1 / 2 / 3` | 에디터 그룹 1 / 2 / 3에 포커스 |
| `Ctrl+\` | 에디터 분할 |
| `Ctrl+B` | 사이드바 전환 |
| `Ctrl+J` | 하단 패널 전환 |

## 편집

### 줄 작업

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+K` | 줄 전체 삭제 |
| `Alt+Up / Down` | 줄 위 / 아래로 이동 |
| `Shift+Alt+Up / Down` | 줄 위 / 아래로 복사 |
| `Ctrl+Enter` | 아래에 줄 삽입 |
| `Ctrl+Shift+Enter` | 위에 줄 삽입 |
| `Ctrl+Shift+[` | 영역 접기 |
| `Ctrl+Shift+]` | 영역 펼치기 |

### 텍스트 조작

| Command | Description |
|---------|-------------|
| `Ctrl+D` | 단어 선택 (반복으로 다음 일치 추가) |
| `Ctrl+Shift+L` | 선택의 모든 발생 선택 |
| `Ctrl+L` | 줄 전체 선택 |
| `Ctrl+/` | 줄 주석 전환 |
| `Shift+Alt+A` | 블록 주석 전환 |
| `Tab / Shift+Tab` | 들여쓰기 / 내어쓰기 |

## 멀티커서

### 커서 추가

| Command | Description |
|---------|-------------|
| `Alt+Click` | 클릭 위치에 커서 추가 |
| `Ctrl+Alt+Up / Down` | 위 / 아래에 커서 추가 |
| `Ctrl+D` | 선택의 다음 발생 추가 |
| `Ctrl+Shift+L` | 모든 발생에 커서 추가 |
| `Ctrl+U` | 마지막 커서 추가 취소 |
| `Esc` | 멀티커서 모드 종료 |

### 멀티커서 워크플로

```
// Select a word, then Ctrl+D to add matches
// Type replacement — all cursors update
// Ctrl+Shift+L selects ALL matches at once
// Alt+Click for arbitrary cursor placement
```

## 터미널

### 터미널 단축키

| Command | Description |
|---------|-------------|
| `Ctrl+`` | 통합 터미널 전환 |
| `Ctrl+Shift+`` | 새 터미널 생성 |
| `Ctrl+Shift+5` | 터미널 분할 |
| `Ctrl+PgUp / PgDn` | 터미널 위 / 아래 스크롤 |
| `Ctrl+Shift+C` | 터미널에서 선택 복사 |
| `Ctrl+Shift+V` | 터미널에 붙여넣기 |

### 터미널 관리

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+P → Terminal: Kill` | 활성 터미널 종료 |
| `Ctrl+Shift+P → Terminal: Rename` | 터미널 탭 이름 변경 |
| `Terminal dropdown` | 터미널 전환 |
| `terminal.integrated.shell.*` | 기본 셸 변경 설정 |

## 디버깅

### 디버그 컨트롤

| Command | Description |
|---------|-------------|
| `F5` | 디버깅 시작 / 계속 |
| `Shift+F5` | 디버깅 중지 |
| `Ctrl+Shift+F5` | 디버깅 재시작 |
| `F9` | 중단점 전환 |
| `F10` | 스텝 오버 |
| `F11` | 스텝 인 |
| `Shift+F11` | 스텝 아웃 |

### launch.json 예제

```
{
  "type": "node",
  "request": "launch",
  "name": "Run App",
  "program": "${workspaceFolder}/app.js"
}
```

### 디버그 기능

| Command | Description |
|---------|-------------|
| `Watch panel` | 디버깅 중 표현식 모니터링 |
| `Call Stack` | 실행 콜 스택 보기 |
| `Debug Console` | 중단점에서 표현식 평가 |
| `Conditional breakpoint` | 중단점 오른쪽 클릭 → 조건 편집 |
| `Logpoint` | 실행 중단 없이 메시지 로그 |

## 확장

### 확장 관리

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+X` | 확장 보기 열기 |
| `@installed` | 설치된 확장으로 필터 |
| `@enabled / @disabled` | 활성화 / 비활성화로 필터 |
| `@recommended` | 추천 확장 표시 |

### 필수 확장

| Command | Description |
|---------|-------------|
| `Prettier` | 코드 포매터 (JS, TS, CSS, HTML) |
| `ESLint` | JavaScript/TypeScript 린팅 |
| `GitLens` | 향상된 Git 통합 및 블레임 |
| `Remote - SSH` | SSH를 통해 원격 머신에서 개발 |
| `Live Server` | 라이브 리로드 로컬 개발 서버 |
| `Thunder Client` | VS Code 내 REST API 클라이언트 |

## 설정

### 설정 접근

| Command | Description |
|---------|-------------|
| `Ctrl+,` | 설정 UI 열기 |
| `Ctrl+Shift+P → settings.json` | 설정 JSON 열기 |

### 일반 설정 (JSON)

```
{
  "editor.fontSize": 14,
  "editor.tabSize": 2,
  "editor.formatOnSave": true,
  "editor.wordWrap": "on",
  "files.autoSave": "afterDelay"
}
```

### 워크스페이스 vs 사용자

| Command | Description |
|---------|-------------|
| `User settings` | 전역, 모든 프로젝트에 적용 |
| `Workspace settings` | 프로젝트별, .vscode/settings.json에 저장 |
| `Workspace overrides User` | 워크스페이스 설정이 우선 |

## 키보드 단축키

### 커스터마이즈

| Command | Description |
|---------|-------------|
| `Ctrl+K Ctrl+S` | 키보드 단축키 에디터 열기 |
| `keybindings.json` | 커스텀 바인딩용 JSON 파일 |

### 필수 단축키

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+P` | 명령 팔레트 (모든 것 접근) |
| `Ctrl+P` | 파일 빠른 열기 |
| `Ctrl+Shift+F` | 모든 파일 검색 |
| `Ctrl+H` | 파일에서 찾기 및 바꾸기 |
| `Ctrl+Shift+H` | 파일 전체에서 찾기 및 바꾸기 |
| `F2` | 심볼 이름 변경 |
| `Ctrl+.` | 빠른 수정 (코드 액션) |
| `Ctrl+Space` | IntelliSense 트리거 |
| `Ctrl+Shift+I` | 문서 포맷 |

## Git 통합

### 소스 컨트롤 보기

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+G` | 소스 컨트롤 패널 열기 |
| `+` | 변경 사항 스테이지 (SCM 보기에서) |
| `-` | 변경 사항 언스테이지 |
| `Ctrl+Enter` | 스테이지된 변경 사항 커밋 |
| `...` | 더 많은 작업 (푸시, 풀 등) |

### 인라인 Git 기능

| Command | Description |
|---------|-------------|
| `Gutter indicators` | 추가/수정/삭제에 대한 녹색/파란색/빨간색 표시 |
| `Ctrl+Shift+P → Git: Checkout` | 브랜치 전환 |
| `Ctrl+Shift+P → Git: Pull` | 원격에서 풀 |
| `Ctrl+Shift+P → Git: Push` | 원격으로 푸시 |
| `Click gutter change` | 수정된 줄의 인라인 diff 보기 |

### Diff 및 머지

| Command | Description |
|---------|-------------|
| `SCM → Open Changes` | 나란히 diff 보기 |
| `Inline diff arrows` | 개별 변경 사항 되돌리기 |
| `3-way merge editor` | 충돌을 시각적으로 해결 (1.69+) |

## 자주 쓰는 패턴

### 워크스페이스 기능

| Command | Description |
|---------|-------------|
| `Ctrl+Shift+E` | 파일 탐색기에 포커스 |
| `Ctrl+Shift+D` | 디버그 보기에 포커스 |
| `Ctrl+Shift+M` | 문제 패널 표시 |
| `Ctrl+K Ctrl+T` | 색상 테마 변경 |
| `Ctrl+K Z` | Zen 모드 진입 |

### 스니펫

```
// File → Preferences → Configure Snippets
"Print": {
  "prefix": "log",
  "body": "console.log('$1');",
  "description": "Console log"
}
```

### 태스크 (tasks.json)

```
{
  "label": "build",
  "type": "shell",
  "command": "npm run build",
  "group": "build"
}
```
