Notebook 입력 모드에서 출력 접기 단축키가 멈추는 이유
저장된 출력이 있는 같은 셀에서 입력 모드와 Command Mode의 Context Keys를 비교해, inputFocus가 Collapse Cell Output 단축키의 When 결과를 어떻게 바꾸는지 확인합니다.
이번 편의 핵심
나머지 세 상태를 고정하고 inputFocus=true → false만 바뀔 때 Collapse keybinding When이 false → true로 바뀜을 설명할 수 있으면 완료입니다.
출력이 있는데도 단축키가 반응하지 않으면 명령 고장으로 단정하기 전에 코드 입력 caret이 살아 있는지 확인하세요.
1. 시작하기 전에
난이도는 초급입니다. Notebook 파일 편집이나 셀 실행 없이 포커스 전환, Context 조회, Boolean 계산만 합니다.
준비할 것
- Windows 11과 VS Code Stable 1.139.1 — 확인: Help > About 또는
code --version - 저장된 출력 1건이 있는 격리 Notebook — 확인: 화면의
SAVED_OUTPUT_ONLY와 JSON의outputs[0] - Developer Tools Console — 확인: Help > Toggle Developer Tools에서 Console 탭 표시
적용 환경 Windows 11 · VS Code Stable 1.139.1 · PowerShell 7 또는 Windows PowerShell
2. 알아둘 핵심 개념
When clause
Context key의 현재 값을 조합해 키 바인딩 같은 UI 규칙이 적용되는 조건을 표현합니다. &&는 모든 항목이 true여야 하고 !는 Boolean을 반전합니다.
inputFocus
공식 문서에서 텍스트 입력 영역이 포커스를 가지면 true인 Context key입니다. 코드 셀 편집 영역의 caret이 활성일 때 true이고, Esc로 셀 선택으로 돌아오면 false가 됩니다.
notebookCellHasOutputs
선택 셀에 출력이 있으면 true인 Notebook 내부 Context key입니다. 이번 두 Snapshot에서는 모두 true로 고정합니다.
notebookCellOutputIsCollapsed
출력 영역이 접힌 상태인지 나타냅니다. 이번 실습은 출력 접기 명령을 실행하지 않으므로 두 Snapshot에서 모두 false입니다.
확인 범위
이번 실습이 판정하는 것은 Collapse Cell Output 키 바인딩의 When 식입니다. Command Palette 노출이나 직접 명령 호출 가능 여부까지 일반화하지 않습니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 격리된 출력 포함 Notebook 확인
목적 업무 파일과 현재 User 프로필을 보호한 채 이미 저장된 출력 하나를 준비한다.
- 격리 폴더의 input-focus-context.ipynb를 열고 셀 실행·저장·단축키 편집을 하지 않기로 확인한다.
입력 위치 격리 폴더의 input-focus-context.ipynb
execution_count=1, outputs[0].text='SAVED_OUTPUT_ONLY'
정상 결과 코드 셀 아래에 SAVED_OUTPUT_ONLY 출력이 보이지만 새 실행은 일어나지 않는다.
확인 Notebook JSON의 outputs 배열 길이와 화면 출력 문구를 대조한다.
실패 신호 출력이 없거나 업무 Notebook을 열었거나 실행 표시가 바뀌었다.
2. Collapse When 식 고정
목적 관찰 전에 판정 규칙을 정확히 적는다.
- 현재 Stable 소스의 Collapse Cell Output keybinding When 식을 실습 메모에 적는다.
입력 위치 공식 Stable cellCommands.ts
listFocused && !outputCollapsed && !inputFocus && hasOutputs
정상 결과 네 조건이 모두 true여야 해당 단축키 규칙이 활성이라는 식이 준비된다.
확인 명령 ID notebook.cell.collapseCellOutput와 네 Context key를 원문에서 대조한다.
실패 신호 inputFocus의 부정 연산자나 hasOutputs가 빠졌다.
3. Developer Tools Console 열기
목적 Inspect Context Keys 결과가 출력될 위치를 준비한다.
- Command Palette에서 Developer: Toggle Developer Tools를 실행하고 Console 탭을 선택한다.
입력 위치 Command Palette → Developer Tools
Console 탭
정상 결과 Console 입력·출력 영역이 보인다.
확인 Developer Tools 상단에서 Console이 선택됐는지 확인한다.
실패 신호 별도 창이나 Console 탭을 찾을 수 없다.
4. 입력 모드 Snapshot A 만들기
목적 출력은 유지하고 코드 입력 영역에 포커스를 둔다.
- 같은 코드 셀의 편집 영역을 한 번 클릭해 caret이 깜박이는 입력 모드로 만든다.
입력 위치 Notebook 코드 셀 입력 영역
SAVED_OUTPUT_ONLY 표시 / caret 표시 / 출력 펼침
정상 결과 코드 caret과 저장된 출력이 동시에 보인다.
확인 다른 파일이나 출력 영역이 아닌 같은 셀 입력 영역인지 확인한다.
실패 신호 caret이 없거나 출력이 보이지 않는다.
5. Snapshot A 수집
목적 입력 모드의 네 Context 값을 한 객체에서 읽는다.
- Developer: Inspect Context Keys를 실행하고 같은 코드 입력 영역을 한 번 클릭한다.
입력 위치 Command Palette → selected code input
Snapshot A
정상 결과 Console에 Context 객체 하나가 추가된다.
확인 객체에서 notebookCellListFocused, inputFocus, notebookCellHasOutputs, notebookCellOutputIsCollapsed를 찾는다.
실패 신호 객체가 없거나 네 key 중 하나가 없다.
6. 입력 모드의 When 계산
목적 inputFocus=true가 어느 항목을 막는지 확인한다.
- Snapshot A 값을 Collapse When 식에 왼쪽부터 대입한다.
입력 위치 실습 메모
true && !false && !true && true
정상 결과 중간값은 true, true, false, true이고 전체 결과는 false다.
확인 hasOutputs=true와 outputCollapsed=false가 유지됐는지 같은 객체에서 대조한다.
실패 신호 hasOutputs=false이거나 outputCollapsed=true다.
7. Command Mode Snapshot B 만들기
목적 파일·출력은 그대로 두고 inputFocus만 false로 바꾼다.
- Esc를 눌러 caret을 없앤 뒤 같은 셀의 왼쪽 여백을 선택한다.
입력 위치 같은 Notebook 셀
SAVED_OUTPUT_ONLY 표시 / caret 없음 / 셀 선택 표시
정상 결과 출력은 펼쳐진 채이고 코드 입력 caret만 사라진다.
확인 출력 문구와 셀 선택 표시를 함께 확인한다.
실패 신호 출력이 접혔거나 다른 셀이 선택됐다.
8. Snapshot B 수집과 비교
목적 같은 셀에서 포커스 전환 뒤 Context 값을 읽는다.
- Developer: Inspect Context Keys를 실행하고 선택된 셀 컨테이너를 한 번 클릭한다.
입력 위치 Command Palette → selected cell container
Snapshot B
정상 결과 Console에 두 번째 Context 객체가 추가된다.
확인 A와 B에서 listFocused=true, hasOutputs=true, outputCollapsed=false가 같고 inputFocus만 true→false인지 확인한다.
실패 신호 둘 이상의 key가 바뀌거나 Snapshot 대상이 다르다.
9. Command Mode의 When 계산
목적 inputFocus=false가 보호 조건을 통과시키는지 확인한다.
- Snapshot B 값을 같은 Collapse When 식에 대입한다.
입력 위치 실습 메모
true && !false && !false && true
정상 결과 네 중간값이 모두 true이고 전체 결과도 true다.
확인 Snapshot A의 false와 Snapshot B의 true를 나란히 비교한다.
실패 신호 A와 B의 결과가 같거나 계산 항목이 네 개가 아니다.
10. 변경 0건 독립 확인
목적 관찰 과정이 파일과 User 설정을 바꾸지 않았는지 확인한다.
- 실습 전후 Notebook SHA-256과 격리 User keybindings.json을 비교한다.
입력 위치 PowerShell · Run 폴더에서 실행
Get-FileHash .\_qa\notebook-fixture\input-focus-context.ipynb -Algorithm SHA256
정상 결과 Notebook 해시는 동일하고 격리 keybindings.json은 [] 그대로다.
확인 전후 해시 문자열과 keybindings.json 원문을 비교한다.
실패 신호 해시가 달라지거나 keybindings.json에 항목이 생겼다.
11. 완료 조건 재확인
목적 두 Snapshot·판정·무변경 증거를 한 번에 닫는다.
- Snapshot A/B, 두 Boolean 계산, 파일 비교 결과를 체크리스트로 확인한다.
입력 위치 실습 체크리스트
A: true/true/true/false · B: true/false/true/false · When: false→true · SHA-256
정상 결과 inputFocus만 true에서 false로 바뀌고 Collapse keybinding When이 false에서 true로 바뀌며 파일 변경은 0건이다.
확인 각 항목이 Evidence에 독립적으로 있는지 확인한다.
실패 신호 한 항목이라도 누락되거나 값이 다르다.
4. 완료 확인하기
두 Context 객체와 독립된 파일 비교를 함께 사용해 결과를 교차 확인합니다.
- Snapshot A · 입력 모드 —
listFocused=true / inputFocus=true / hasOutputs=true / outputCollapsed=false - Snapshot B · Command Mode —
listFocused=true / inputFocus=false / hasOutputs=true / outputCollapsed=false - Boolean 계산 — A는
true && true && false && true = false, B는true && true && true && true = true입니다. - Notebook SHA-256 — 실습 전후가 같습니다.
- 격리 User
keybindings.json—[]그대로입니다.
완료 기준 같은 출력 포함 셀에서 inputFocus만 true에서 false로 바뀌고, Collapse Cell Output 키 바인딩 When 결과가 false에서 true로 바뀌며 파일·키 바인딩 변경이 0건임을 설명할 수 있습니다.
5. 문제가 생겼다면
Snapshot A의 inputFocus가 false다
먼저 확인 코드 입력 caret이 실제로 깜박이는지 봅니다.
복구 같은 셀의 코드 입력 영역을 클릭하고 다시 측정합니다.
재합류 STEP-04
Snapshot B의 inputFocus가 true다
먼저 확인 Esc 뒤에도 코드 입력 caret이 남았는지 봅니다.
복구 Esc를 누르고 같은 셀 왼쪽 여백을 선택합니다.
재합류 STEP-07
notebookCellHasOutputs가 false다
먼저 확인 SAVED_OUTPUT_ONLY가 같은 셀 아래에 보이는지 확인합니다.
복구 파일을 수정하지 말고 제공된 출력 포함 격리 샘플을 다시 엽니다.
재합류 STEP-01
Inspect 결과에 key가 없다
먼저 확인 Snapshot A에서는 코드 입력 영역, B에서는 셀 컨테이너를 클릭했는지 확인합니다.
복구 대상과 오류 원문을 보존하고 원인을 확정할 수 없으면 UNKNOWN으로 기록합니다.
재합류 STEP-04
파일 해시가 달라졌다
먼저 확인 자동 저장, 수동 저장, 셀 실행 여부를 확인합니다.
복구 변경본을 덮어쓰지 말고 별도로 보존한 뒤 새 격리 복사본으로 다시 시작합니다.
재합류 STEP-01
6. 핵심 정리와 공식 자료
- 코드 입력 caret이 살아 있으면
inputFocus=true입니다. - Collapse keybinding은
!inputFocus를 요구하므로 입력 모드에서는 When 결과가 false입니다. - Esc 뒤 같은 셀을 선택하면
inputFocus=false가 되어 나머지 조건이 같을 때 결과가 true가 됩니다. - When 결과는 해당 키 바인딩 규칙의 판정이며 명령 전체의 존재 여부로 확대하지 않습니다.
공식 자료
아래 자료는 2026-09-26 KST에 확인했습니다. Stable 1.139.1·커밋 04c0d99f4fb0d8afe6ce4f0c58e31e183ac3e4b1 기준이며 내부 Notebook Context key는 향후 변경될 수 있습니다.
- When clause contexts · Microsoft
- Jupyter Notebooks in VS Code · Microsoft
- Notebook cell commands · Microsoft vscode Stable 1.139.1
- Notebook Context Keys · Microsoft vscode Stable 1.139.1
'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 60부: 키보드로 Notebook 출력 영역에 들어갔다 나오기 (0) | 2026.09.28 |
|---|---|
| 커맨드 팔레트 59부: Notebook 출력 포커스에서 셀 선택으로 돌아오기 (0) | 2026.09.27 |
| 커맨드 팔레트 57부: 출력이 없는 Notebook 셀의 출력 접기 조건 확인하기 (0) | 2026.09.25 |
| 커맨드 팔레트 56부: Notebook 셀 출력 접기 전후 Context Keys 비교하기 (0) | 2026.09.25 |
| 커맨드 팔레트 55부: Notebook 셀 접기 전후 Context Keys 비교하기 (0) | 2026.09.24 |