커맨드 팔레트 48부: VS Code 현재 키보드 레이아웃의 키 매핑 원문 확인하기
설정을 바꾸지 않고 현재 키보드 레이아웃의 scan code·virtual key·produced character를 VS Code 진단 원문에서 확인합니다.
이번 편의 핵심
Developer: Inspect Key Mappings의 Layout info, mapper 표, Raw mapping을 같은 문서에서 읽습니다.
완료하면 자신의 Layout 세 필드와 KeyK·KeyT 대응을 원문으로 보존하고, User keybindings 변경 0회를 확인합니다.
1. 시작하기 전에
예상 시간은 15~25분입니다. 독자는 Command Palette와 편집기 찾기(Ctrl+F), 로컬 Save As를 사용할 수 있으면 됩니다. Task 실행이나 keybindings.json 편집은 하지 않습니다.
준비할 것
- 직접 만든 빈 연습 폴더 — 기존 파일 덮어쓰기를 피합니다.
- Windows 11 · 공식 Stable 1.138.0 · Windows PowerShell — 최신 commit은 7debcd0e2acdea1c52de81bf9ee1620444407dda입니다.
- 이 Run의 최신 UI 관찰은 공식 SHA-256 검증 portable 1.138.0이며, 사용자 설치본 1.137.0은 업데이트하지 않고 버전 차이로 기록했습니다.
- 로컬 Evidence 파일 두 개 — 전체 원문과 짧은 notes를 외부 전송 없이 보존합니다.
2. 알아둘 핵심 개념
FACT — 이 명령은 설정값이 아니라 진단 원문을 새 편집기에 엽니다
Stable 구현은 현재 keyboard layout, 기본·User resolved keybindings, mapper debug table, raw keyboard mapping을 조합해 Untitled 편집기에 엽니다. keybindings.json을 수정하는 명령이 아닙니다. [SRC-02] [SRC-03]
FACT — Windows에서는 scan code와 virtual key가 서로 다른 층입니다
공식 설명에서 e.code는 scan code, e.keyCode는 Windows virtual key에 대응합니다. 첫 매핑이 물리 위치를 virtual key로, 두 번째 매핑이 virtual key와 modifier를 실제 문자로 연결합니다. [SRC-02] [SRC-04]
FACT — Layout info는 독자 환경의 실제 값을 그대로 읽어야 합니다
이 Run의 격리 관찰은 name 00000409, id 빈 문자열, text US였습니다. 이것은 예시 답안이 아니라 2026-09-16 이 환경의 관찰값입니다. 독자는 자신의 세 값을 치환 없이 기록합니다. [SRC-03]
FACT — KeyK와 KeyT는 표와 Raw mapping에서 교차 확인할 수 있습니다
이 Run에서 KeyK 행은 KeyCode K·User settings k, Raw mapping은 VK_K·value k·withShift K였습니다. KeyT도 T·t와 VK_T·t·T로 일치했습니다. 다른 레이아웃에는 다른 값이 나올 수 있습니다. [SRC-02] [SRC-04]
INFERENCE — WYSIWYG 열의 공백은 이 구현에서 true입니다
Stable mapper 구현은 isWYSIWYG가 false일 때만 NO를 출력하고 true이면 공백을 출력합니다. 따라서 이 Run의 KeyK·KeyT 공백은 mapper가 표시와 User settings를 일치한다고 본 결과입니다. [SRC-03]
RECOMMENDATION — 전체 원문은 로컬에 보존하고 공유 전 경로·레이아웃 정보를 검토합니다
이 출력은 키 매핑과 User resolved keybindings를 포함할 수 있습니다. 직접 만든 폴더에 저장하고 외부 업로드는 별도 Human Gate로 둡니다. [SRC-02] [SRC-03]
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. Evidence를 둘 빈 폴더를 준비합니다
목적 기존 프로젝트와 저장 파일을 보호합니다.
- 직접 만든 빈 JCOS-VSC48-Keymap-Lab 폴더를 File > Open Folder...로 엽니다.
입력 위치 VS Code 메뉴; Workspace Folder 범위
폴더 이름: JCOS-VSC48-Keymap-Lab
정상 결과 Explorer 최상위에 빈 연습 폴더만 보입니다.
확인 기존 파일과 .vscode 폴더가 0개인지 확인합니다.
실패 신호 업무 파일이나 기존 설정 폴더가 보입니다.
복구와 재합류 아무것도 저장하지 말고 폴더를 닫은 뒤 새 빈 폴더에서 STEP-01로 재합류합니다.
근거 [SRC-01]
2. Stable 기준과 설치 버전을 함께 기록합니다
목적 출력의 적용 기준 시점과 로컬 관찰 범위를 분리합니다.
- 별도 Windows PowerShell에서 code --version을 실행하고, 공식 Stable API 첫 항목과 나란히 기록합니다.
입력 위치 Shell: Windows PowerShell; 실행 위치: 임의
공식 Stable: 1.138.0 / 7debcd0e2acdea1c52de81bf9ee1620444407dda
설치본 code --version: 1.137.0 / 645f29cc3176500b4b5762ba887cf2a7f0ffdf2c / x64
정상 결과 공식 최신과 현재 설치본을 서로 다른 줄에 기록했습니다. 이 Run의 최신 UI 검증은 공식 portable 1.138.0입니다.
확인 Release Note 날짜, API 첫 항목, 설치본 세 줄을 대조합니다.
실패 신호 code를 찾지 못하거나 어느 값이 공식 최신인지 구분하지 못했습니다.
복구와 재합류 Help > About으로 설치본을 확인합니다. 설치본이 1.137.0이어도 자동 업데이트하지 말고 차이를 기록한 뒤 STEP-03으로 이동합니다.
3. Inspect Key Mappings를 실행합니다
목적 현재 레이아웃 원문을 새 편집기에 엽니다.
- F1을 누르고 Developer: Inspect Key Mappings를 검색해 정확한 명령을 실행합니다.
입력 위치 Command Palette
Developer: Inspect Key Mappings
정상 결과 Layout info:로 시작하는 Untitled 편집기가 열립니다.
확인 첫 제목과 Layout info, Default Resolved Keybindings, Raw mapping 네 표식을 찾습니다.
실패 신호 명령이 없거나 다른 설정 화면이 열립니다.
복구와 재합류 오류 원문과 VS Code 버전을 보존합니다. 임의 번역 명령을 고르지 말고 정확한 영문 검색 결과를 다시 확인한 뒤 STEP-03으로 재합류합니다.
4. 출력의 네 구역을 표시합니다
목적 표와 JSON을 혼동하지 않게 탐색 기준을 만듭니다.
- Ctrl+F로 Layout info:, Default Resolved Keybindings, User Resolved Keybindings, Raw mapping:을 차례로 찾고 줄 번호를 메모합니다.
입력 위치 Inspect Key Mappings Untitled 편집기
Layout info:
Default Resolved Keybindings (unique only):
User Resolved Keybindings (unique only):
Raw mapping:
정상 결과 네 구역이 같은 Untitled 문서에 순서대로 있습니다.
확인 찾기 결과 수와 각 첫 줄을 기록합니다.
실패 신호 한 구역이 없거나 다른 문서를 검색했습니다.
복구와 재합류 편집기 탭 제목이 Layout info:인지 확인하고 STEP-03에서 명령을 다시 실행한 뒤 STEP-04로 재합류합니다.
근거 [SRC-03]
5. Layout info 원문을 기록합니다
목적 현재 레이아웃 식별자를 샘플과 분리합니다.
- 문서 첫 블록의 name, id, text 세 값을 key-mapping-notes.txt 초안에 그대로 옮깁니다.
입력 위치 Untitled 출력과 연습 폴더의 새 텍스트 파일
이 Run 예시
name: "00000409"
id: ""
text: "US"
<독자는 자신의 실제 세 값으로 치환>
정상 결과 세 필드와 빈 문자열도 빠짐없이 기록됩니다.
확인 원문과 초안을 나란히 놓고 문자 단위로 비교합니다.
실패 신호 00000409·US를 화면 확인 없이 복사했거나 id를 생략했습니다.
복구와 재합류 샘플 줄을 지우고 자신의 Layout info를 다시 옮긴 뒤 STEP-05로 재합류합니다.
6. KeyK 표 행을 찾습니다
목적 물리 위치와 virtual key 표시를 한 행에서 비교합니다.
- Ctrl+F로 KeyK를 찾고 mapper 표의 modifier 없는 KeyK 행을 선택해 열 이름과 함께 기록합니다.
입력 위치 Inspect Key Mappings의 HW Code combination 표
HW Code=KeyK | Key=k | KeyCode=K | UI label=K | User settings=k | WYSIWYG=<공백>
정상 결과 KeyK가 HW Code 열에 있고 KeyCode combination은 K입니다.
확인 표 머리글과 같은 화면에서 modifier 없는 행을 읽습니다.
실패 신호 Default Resolved Keybindings나 Raw mapping의 KeyK를 표 행으로 착각했습니다.
복구와 재합류 HW Code combination 머리글까지 위로 올려 같은 열 정렬을 다시 확인한 뒤 STEP-06으로 재합류합니다.
7. KeyT 표 행을 찾습니다
목적 두 번째 물리 키의 매핑을 같은 기준으로 확인합니다.
- Ctrl+F로 KeyT를 찾고 modifier 없는 KeyT 행을 열 이름과 함께 기록합니다.
입력 위치 Inspect Key Mappings의 HW Code combination 표
HW Code=KeyT | Key=t | KeyCode=T | UI label=T | User settings=t | WYSIWYG=<공백>
정상 결과 KeyT가 HW Code 열에 있고 KeyCode combination은 T입니다.
확인 KeyK 기록과 동일한 여섯 열 순서인지 대조합니다.
실패 신호 Ctrl+Alt+KeyT 행이나 다른 열을 기록했습니다.
복구와 재합류 modifier가 없는 KeyT 행으로 돌아가 STEP-07을 다시 기록합니다.
8. Raw mapping의 KeyK와 KeyT를 읽습니다
목적 표의 KeyCode를 원시 JSON과 교차 확인합니다.
- Raw mapping: 아래에서 "KeyK":와 "KeyT":를 찾아 각 객체의 다섯 필드를 옮깁니다.
입력 위치 Inspect Key Mappings의 Raw mapping JSON
{
"KeyK": {"vkey": "VK_K", "value": "k", "withShift": "K", "withAltGr": "", "withShiftAltGr": ""},
"KeyT": {"vkey": "VK_T", "value": "t", "withShift": "T", "withAltGr": "", "withShiftAltGr": ""}
}
정상 결과 KeyK에는 VK_K·k·K, KeyT에는 VK_T·t·T가 있으며 AltGr 두 값은 이 Run에서 빈 문자열입니다.
확인 각 객체의 여는 키 이름부터 닫는 중괄호까지 원문과 비교합니다.
실패 신호 KeyK 주변 KeyJ/KeyL 값이 섞이거나 KeyT 주변 KeyS/KeyU 값이 섞였습니다.
복구와 재합류 찾기 일치 줄을 객체 첫 줄로 맞추고 다섯 필드를 다시 옮긴 뒤 STEP-08로 재합류합니다.
9. scan code와 virtual key 대응을 판정합니다
목적 현재 레이아웃에서만 성립하는 관찰을 명확히 합니다.
- KeyK·KeyT 각각에 대해 HW Code, vkey, value를 한 줄 화살표로 연결하고 Layout info를 옆에 적습니다.
입력 위치 key-mapping-notes.txt
00000409 / US
KeyK -> VK_K -> k
KeyT -> VK_T -> t
정상 결과 두 연결이 표와 Raw mapping 원문 모두에 의해 지지됩니다.
확인 세 값마다 원문 출처 줄 번호를 하나씩 붙입니다.
실패 신호 다른 레이아웃에서도 항상 같다고 결론 내렸거나 표 한쪽만 확인했습니다.
복구와 재합류 결론을 '이 Run의 00000409/US에서'로 좁히고 STEP-06~08 원문을 다시 대조한 뒤 STEP-09로 재합류합니다.
10. 전체 원문을 로컬 파일로 저장합니다
목적 문제 재현 시 그대로 비교할 Evidence를 보존합니다.
- File > Save As...에서 직접 만든 빈 폴더에 key-mapping-2026-09-16.txt라는 새 이름으로 저장합니다.
입력 위치 Inspect Key Mappings Untitled 편집기; 로컬 연습 폴더
key-mapping-2026-09-16.txt
정상 결과 저장 후 탭의 미저장 점이 사라지고 파일이 Explorer에 보입니다.
확인 파일 첫 줄 Layout info:와 끝쪽 Raw mapping:이 모두 있는지 확인합니다.
실패 신호 같은 이름의 기존 파일이 있거나 덮어쓰기 확인이 뜹니다.
복구와 재합류 덮어쓰기를 취소하고 -02 접미사를 붙인 새 이름으로 STEP-10을 다시 실행합니다.
11. JSON 변형으로 독립 검증합니다
목적 plain 출력의 Layout·Raw mapping을 다른 표시 형식으로 교차 확인합니다.
- F1에서 Developer: Inspect Key Mappings (JSON)을 실행하고 layout, rawMapping.KeyK, rawMapping.KeyT를 STEP-05·08 기록과 비교합니다.
입력 위치 Command Palette와 새 JSON Untitled 편집기
{"layout":{"name":"<실제 값>","id":"<실제 값>","text":"<실제 값>"},"rawMapping":{"KeyK":{"vkey":"<실제 값>"},"KeyT":{"vkey":"<실제 값>"}}}
정상 결과 plain과 JSON 변형의 layout 세 값 및 KeyK·KeyT 다섯 필드가 같습니다.
확인 두 Untitled 탭을 나란히 비교하고 불일치 0개를 기록합니다.
실패 신호 같은 VS Code 창·레이아웃인데 값이 다릅니다.
복구와 재합류 원인을 UNKNOWN으로 두고 두 원문과 시간을 보존합니다. 새 설정을 바꾸지 말고 두 명령을 다시 실행한 뒤 STEP-11로 재합류합니다.
근거 [SRC-03]
12. 완료 조건과 무변경 상태를 확인합니다
목적 Evidence 보존과 설정 무변경을 함께 마칩니다.
- 저장한 파일·notes의 값과 열린 탭을 확인한 뒤 두 진단 탭을 닫습니다.
입력 위치 Explorer, 두 진단 탭, Keyboard Shortcuts 검색 화면(읽기 전용)
Evidence file=1
Layout fields=3
KeyK cross-check=PASS
KeyT cross-check=PASS
User keybinding edits=0
정상 결과 로컬 Evidence에는 원문 전체가 있고 notes에는 자신의 Layout·KeyK·KeyT 값이 있으며 User 단축키 변경은 없습니다.
확인 저장 파일 크기>0, 첫/마지막 표식, notes 세 연결, 이번 실습의 keybindings.json 편집 0회를 독립 확인합니다.
실패 신호 필드 누락, 빈 파일, 미저장 탭 또는 User 설정 변경이 보입니다.
복구와 재합류 현재 상태와 오류 원문을 보존하고 해당 STEP으로 돌아갑니다. 설정 변경이 있다면 원인을 확인한 범위만 복원한 뒤 STEP-12로 재합류합니다.
4. 완료 확인하기
- VERSION — 공식 Stable API·Release Note·portable 검증은 1.138.0이고, 자신의 설치본은 별도 값으로 기록했습니다.
- LAYOUT — 자신의 name·id·text 세 필드를 샘플과 구분해 기록했습니다.
- TABLE — modifier 없는 KeyK·KeyT 행을 여섯 열과 함께 읽었습니다.
- RAW — rawMapping.KeyK와 rawMapping.KeyT 다섯 필드를 기록했습니다.
- CROSS-CHECK — plain과 JSON 변형의 Layout·KeyK·KeyT 값이 일치합니다.
- SAFETY — 로컬 Evidence 파일은 비어 있지 않고 User keybindings·Windows layout 변경은 0회입니다.
완료 기준 현재 레이아웃의 실제 세 필드와 KeyK·KeyT의 scan code→virtual key→문자 대응을 두 출력 형식에서 확인하고, 원문을 로컬에 보존했으며 설정은 바꾸지 않았습니다.
5. 문제가 생겼다면
명령 검색 결과가 없습니다
먼저 확인 code --version, Command Palette의 Developer 범주, 영문 검색 문자열을 기록합니다.
복구 정확한 Inspect Key Mappings 문자열로 다시 검색합니다. 그래도 없으면 현재 버전에서 UNCONFIRMED로 중단합니다.
재합류 STEP-03
KeyK가 여러 번 검색됩니다
먼저 확인 현재 위치가 Default Resolved Keybindings, mapper 표, Raw mapping 중 어디인지 제목을 봅니다.
복구 표는 HW Code combination 머리글, JSON은 Raw mapping: 머리글을 기준으로 다시 찾습니다.
재합류 STEP-06 또는 STEP-08
Layout info가 00000409·US가 아닙니다
먼저 확인 이것은 실패가 아니라 다른 환경의 관찰일 수 있습니다. 자신의 name·id·text를 원문 그대로 기록합니다.
복구 샘플 값을 지우고 자신의 값으로 STEP-05를 다시 작성합니다.
재합류 STEP-05
WYSIWYG에 NO가 보입니다
먼저 확인 같은 행의 HW Code, KeyCode, UI label, User settings를 함께 보존합니다.
복구 이 글에서는 설정을 고치지 않고 진단 Evidence로 남깁니다.
재합류 STEP-06 또는 다음 편
plain과 JSON 값이 다릅니다
먼저 확인 같은 창·같은 레이아웃·같은 시점인지와 두 탭 제목을 기록합니다.
복구 원인을 UNKNOWN으로 두고 두 원문을 보존한 뒤 같은 창에서 두 명령을 다시 실행합니다.
재합류 STEP-11
덮어쓰기 확인이 뜹니다
먼저 확인 대상 폴더와 기존 파일 이름을 읽습니다.
복구 취소하고 -02 접미사를 붙인 새 파일로 저장합니다.
재합류 STEP-10
6. 핵심 정리와 공식 자료
- Inspect Key Mappings는 현재 레이아웃·resolved keybindings·mapper 표·Raw mapping을 한 Untitled 문서에 엽니다.
- Windows의 scan code, virtual key, produced character는 같은 값이 아니므로 열 이름과 함께 읽습니다.
- 공식 Stable 1.138.0 격리 관찰의 00000409/US에서는 KeyK→VK_K→k, KeyT→VK_T→t였지만 독자는 자신의 실제 값을 기록합니다.
- 진단 원문은 로컬에 보존하고 User keybindings와 Windows layout은 바꾸지 않습니다.
공식 자료
아래 자료는 2026-09-16 KST에 접근했습니다. Stable 1.138.0·Windows 11 범위이며, 키보드 하드웨어·IME·원격 세션·다른 레이아웃의 결과는 독자 환경에서 확인해야 합니다.
- Keyboard shortcuts for Visual Studio Code · Microsoft — 현재 레이아웃에 맞춘 단축키 표시, scan code 독립 바인딩과 허용 목록
- Keybinding Issues · Microsoft vscode — Inspect key mappings 실행, Windows scan code·virtual key·produced character의 두 단계 매핑
- Stable keybindingService.ts · Microsoft vscode — Stable 1.138.0이 Layout info, resolved keybindings, mapper info, Raw mapping을 구성하는 구현; 1.137.0의 해당 dump block과 byte-identical
- Virtual-Key Codes · Microsoft Learn — Windows K=0x4B, T=0x54 virtual-key 기준
- Visual Studio Code 1.138 · Microsoft — 2026-09-16 공개 Stable 1.138 기준 시점
- VS Code Stable releases API and update metadata · Microsoft — 접근 시 첫 항목 1.138.0, Windows x64 commit 7debcd0e2acdea1c52de81bf9ee1620444407dda
'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 50부: 단축키 입력 상자의 표시와 JSON 교차 확인추천 태그: (0) | 2026.09.19 |
|---|---|
| 커맨드 팔레트 49부: VS Code 키 매핑 표의 WYSIWYG NO 행 읽기 (0) | 2026.09.17 |
| 커맨드 팔레트 47부: VS Code Task 단축키를 물리 키 위치로 고정하기 (1) | 2026.09.16 |
| 커맨드 팔레트 46부: VS Code Task 종료 단축키의 매칭 로그로 충돌 진단하기 (0) | 2026.09.16 |
| 커맨드 팔레트 45부: VS Code Terminal Find가 열려 있을 때 Task 종료 단축키 잠그기 (0) | 2026.09.13 |