개발/Visual Studio Code

커맨드 팔레트 61부: 출력 포커스 단축키가 안 될 때 로그로 확인하기

반응형
VS CODE 초보자 시리즈 · 커맨드 팔레트 61부

출력 포커스 단축키가 안 될 때 로그로 확인하기

Keyboard Shortcuts Troubleshooting 로그에서 감지된 키, 매칭 명령, when 조건, source를 읽어 단축키가 멈춘 지점을 구분합니다.

Developer: Toggle Keyboard Shortcuts Troubleshooting은 키보드 디스패치 로그를 켜고 해당 Output 로그를 엽니다.

Ctrl+Shift+Down과 Ctrl+Shift+Up을 눌러 matched, when, source를 확인하되 단축키는 편집하지 않습니다.

1. 시작하기 전에

난이도는 초급입니다. 로그를 읽는 진단만 수행하며 keybindings.json, Notebook 코드와 출력은 바꾸지 않습니다.

준비할 것

  • Windows 11과 VS Code Stable 1.139.1 — code --version으로 확인
  • 출력이 저장된 격리 Notebook — SAVED_OUTPUT_ONLY 문구로 확인
  • 격리 User 프로필 — keybindings.json이 []인지 확인

적용 환경 Windows 11 · VS Code Stable 1.139.1 · PowerShell

안전하게 시작하기 셀 실행·저장·출력 변경·단축키 편집·로그 외부 전송을 하지 않습니다. 중단 조건: Notebook 해시나 keybindings.json이 바뀌거나 실제 로그가 예상 명령과 다르면 원문을 보존하고 중단합니다.

2. 알아둘 핵심 개념

Received / Converted / Resolving

키가 VS Code에 도착했는지, 현재 키보드 레이아웃으로 어떤 조합이 되었는지, 어떤 규칙 목록을 찾는지 보여 주는 단계입니다.

matched · when · source

matched는 선택된 command, when은 그 순간 참이었던 조건, source는 built-in·user·extension 출처를 뜻합니다.

no when clauses matched the context

키 규칙 후보는 있지만 현재 Context에서 조건이 맞는 규칙이 없다는 판정입니다. 키 입력 자체가 VS Code에 도착하지 않은 경우와 다릅니다.

3. 순서대로 진행하기

각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.

1. 격리 Notebook과 변경 금지 확인

목적 업무 파일과 현재 User 설정을 보호한다.

  1. 저장된 출력이 있는 격리 Notebook을 열고 실행·저장·출력 변경·단축키 편집을 하지 않기로 확인한다.

입력 위치 격리된 VS Code 창

outputs[0].text='SAVED_OUTPUT_ONLY'
정상 결과 저장된 출력이 보이고 keybindings.json은 []다.

확인 Notebook JSON과 격리 User 파일을 읽기만 한다.

실패 신호 업무 파일이 열렸거나 출력이 없다.

복구와 재합류 창을 닫고 격리 샘플에서 STEP-01로 돌아간다.

2. 출력 포함 셀을 선택

목적 focusInOutput의 when 조건이 참이 될 출발 상태를 만든다.

  1. 출력이 있는 셀의 왼쪽 선택 막대를 한 번 클릭하고 코드 편집 커서가 없는지 확인한다.

입력 위치 Notebook 셀 컨테이너

notebookCellHasOutputs=true / notebookCellListFocused=true
정상 결과 출력은 보이고 셀 선택 상태다.

확인 선택 테두리와 저장된 출력 문구를 확인한다.

실패 신호 코드 편집 커서가 보이거나 출력이 접혀 있다.

복구와 재합류 Escape를 누르거나 왼쪽 막대를 다시 클릭해 STEP-02에 재합류한다.

3. Keyboard Shortcuts Troubleshooting 켜기

목적 키 입력 해석을 Output 로그에 기록한다.

  1. Command Palette에서 Developer: Toggle Keyboard Shortcuts Troubleshooting을 한 번 실행한다.

입력 위치 Command Palette

Developer: Toggle Keyboard Shortcuts Troubleshooting
정상 결과 Output 패널이 열리고 Keyboard Shortcuts Troubleshooting 로그가 활성화된다.

확인 Output 패널의 채널 이름과 새 KeybindingService 행을 확인한다.

실패 신호 Output 패널이 열리지 않거나 다른 채널이다.

복구와 재합류 명령을 다시 검색하고 정확한 항목을 실행해 STEP-03에 재합류한다.

4. Ctrl+Shift+Down 한 번 입력

목적 출력 진입 키가 무엇으로 감지되는지 확인한다.

  1. 선택된 출력 포함 셀에서 Ctrl+Shift+Down을 한 번 누른다.

입력 위치 Notebook 셀 선택 상태

Ctrl+Shift+Down
정상 결과 로그에 Resolving ctrl+shift+[ArrowDown] 계열과 focusInOutput 매칭이 기록되고 출력에 포커스가 간다.

확인 Received/Converted/Resolving 행과 matched 행을 순서대로 읽는다.

실패 신호 ArrowDown이 감지되지 않거나 no when clauses matched가 나온다.

복구와 재합류 추가 입력을 멈추고 원문 로그를 보존한 뒤 STEP-02 상태를 다시 만든다.

5. focusInOutput 매칭 행 읽기

목적 실행된 명령과 조건·출처를 분리해 진단한다.

  1. Ctrl+Shift+Down 직후 matched 행에서 command, when, source를 그대로 옮겨 적는다.

입력 위치 Output · Keyboard Shortcuts Troubleshooting

matched notebook.cell.focusInOutput, when: ..., source: built-in
정상 결과 명령이 notebook.cell.focusInOutput이고 source가 built-in임을 확인한다.

확인 matched 행을 공식 Resolver 형식과 대조한다.

실패 신호 다른 command 또는 user/extension source가 보인다.

복구와 재합류 편집하지 말고 실제 행을 Evidence에 보존하고 충돌 가능성을 기록한 뒤 STEP-02로 돌아간다.

6. Ctrl+Shift+Up 한 번 입력

목적 출력에서 셀로 돌아오는 키의 감지와 매칭을 확인한다.

  1. 출력에 포커스가 있는 상태에서 Ctrl+Shift+Up을 한 번 누른다.

입력 위치 Notebook 출력 영역

Ctrl+Shift+Up
정상 결과 로그에 focusOutOutput 매칭이 기록되고 같은 셀 선택으로 돌아온다.

확인 Resolving과 matched 행, 같은 셀 선택 상태를 함께 확인한다.

실패 신호 no when clauses matched 또는 다른 command가 나온다.

복구와 재합류 Escape로 셀에 안전하게 돌아오고 로그 원문을 보존한 뒤 STEP-02에 재합류한다.

7. focusOutOutput 매칭 행 읽기

목적 복귀 명령의 when이 현재 출력 포커스를 요구하는지 확인한다.

  1. Ctrl+Shift+Up 직후 matched 행의 command, when, source를 기록한다.

입력 위치 Output · Keyboard Shortcuts Troubleshooting

matched notebook.cell.focusOutOutput, when: notebookEditorFocused && notebookOutputFocused, source: built-in
정상 결과 출력 포커스 조건과 built-in 출처를 확인한다.

확인 when의 각 피연산자를 현재 상태와 대조한다.

실패 신호 notebookOutputFocused 조건이 없거나 다른 명령이 실행된다.

복구와 재합류 상태와 로그를 UNKNOWN으로 보존하고 STEP-02부터 다시 관찰한다.

8. no when clauses matched 뜻 구분

목적 키 인식 실패와 Context 불일치를 혼동하지 않는다.

  1. 문제가 있는 로그에서 Received/Converted/Resolving 존재 여부와 마지막 판정 행을 구분한다.

입력 위치 Output 로그

Received+Resolving+no when clauses matched = 키는 도착했지만 조건 불일치
정상 결과 키가 감지됐는지와 조건 매칭 여부를 각각 판정한다.

확인 Received·Resolving·최종 판정 세 구간을 원문에서 표시한다.

실패 신호 Received 자체가 없는데 when 문제로 결론 낸다.

복구와 재합류 OS·다른 앱이 키를 가로챘을 가능성을 UNCONFIRMED로 기록하고 로그 범위를 다시 확인한다.

9. Troubleshooting 끄기

목적 지속적인 상세 로그를 종료한다.

  1. Developer: Toggle Keyboard Shortcuts Troubleshooting을 다시 한 번 실행한다.

입력 위치 Command Palette

toggle off
정상 결과 추가 키 입력이 같은 상세 로그로 계속 쌓이지 않는다.

확인 명령을 끈 뒤 새 테스트 키를 누르지 않고 상태만 확인한다.

실패 신호 로그가 계속 쌓이거나 Output 채널이 바뀌었다.

복구와 재합류 같은 명령을 한 번만 다시 실행하고 STEP-09 완료를 확인한다.

10. 로그 4열 요약 만들기

목적 초보자가 원인을 한 줄로 설명할 수 있게 한다.

  1. 두 단축키마다 detected key, matched command, when, source를 한 행에 정리한다.

입력 위치 Run Evidence

Down→focusInOutput / Up→focusOutOutput / source=built-in
정상 결과 두 행 모두 실제 로그 원문에서 추적된다.

확인 요약의 네 열을 원문 로그와 한 칸씩 대조한다.

실패 신호 추정한 명령명이나 생략된 when을 적었다.

복구와 재합류 원문으로 돌아가 빈칸은 UNKNOWN으로 두고 STEP-10을 다시 작성한다.

11. 변경 0건 독립 확인

목적 진단이 설정이나 Notebook을 바꾸지 않았음을 증명한다.

  1. 전후 Notebook SHA-256과 격리 keybindings.json 원문을 비교한다.

입력 위치 PowerShell · Run 폴더

Get-FileHash .\_qa\notebook-fixture\keybinding-log-context.ipynb -Algorithm SHA256
정상 결과 Notebook 해시는 같고 keybindings.json은 []다.

확인 전후 해시와 파일 원문을 확인한다.

실패 신호 해시가 달라지거나 설정 항목이 생겼다.

복구와 재합류 변경 파일을 보존하고 새 격리 프로필에서 STEP-01로 돌아간다.

4. 완료 확인하기

입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.

  • Ctrl+Shift+Down — detected key와 notebook.cell.focusInOutput matched 행이 있다.
  • Ctrl+Shift+Up — detected key와 notebook.cell.focusOutOutput matched 행이 있다.
  • 각 matched 행에서 실제 when과 source: built-in을 읽을 수 있다.
  • Notebook SHA-256은 동일하고 격리 keybindings.json은 []다.
완료 기준 두 단축키가 어떤 키로 감지되고 어떤 built-in 명령·when 조건으로 매칭됐는지 실제 Output 로그로 설명하며 파일과 설정 변경은 0건입니다.

5. 문제가 생겼다면

Received 행이 없다

먼저 확인 로그 토글이 켜졌고 올바른 Output 채널인지 확인합니다.

복구 토글을 다시 켜고 한 번만 입력합니다. 그래도 없으면 OS·드라이버·다른 앱이 키를 가로챘는지 UNCONFIRMED로 남깁니다.

재합류 STEP-03

no when clauses matched가 나온다

먼저 확인 키는 도착했으므로 셀에 출력이 있고 현재 포커스가 요구되는 Context인지 확인합니다.

복구 셀 선택 상태를 다시 만들고 같은 키를 한 번만 재현합니다.

재합류 STEP-02

다른 명령이나 source가 매칭된다

먼저 확인 실제 command, when, source 원문을 보존합니다.

복구 이 글에서는 편집하지 않습니다. Show Same Keybindings와 @source 필터로 별도 진단합니다.

재합류 STEP-10

로그를 끄지 못했다

먼저 확인 같은 Toggle 명령은 켜기와 끄기를 번갈아 수행합니다.

복구 Command Palette에서 같은 명령을 정확히 한 번 실행합니다.

재합류 STEP-09

핵심 판단 원인을 확인하지 못하면 로그 원문과 현재 Context를 보존하고 임의의 keybindings.json 수정 없이 중단합니다.

6. 핵심 정리와 공식 자료

  • Troubleshooting 로그는 키 감지와 규칙 매칭을 한 흐름으로 보여 줍니다.
  • matched 행의 command·when·source가 실제 진단 근거입니다.
  • no when clauses matched는 키 미수신이 아니라 현재 Context 조건 불일치입니다.

공식 자료

아래 자료는 2026-09-29 KST에 확인했습니다. Stable 1.139.1의 Windows 기본 키와 Built-in Notebook 기준이며 사용자 키맵·확장·다른 OS는 다를 수 있습니다.

다음 편 예고 커맨드 팔레트 62부에서는 no when clauses matched the context가 나온 경우 Inspect Context Keys로 실패한 when 피연산자를 찾아 포커스를 복구한 뒤 재실행합니다.
반응형
이 글이 유용했다면 링크를 공유해 보세요.