when 절 컨텍스트
Visual Studio Code는 VS Code UI에서 어떤 요소가 표시되고 활성화되어 있는지에 따라 다양한 컨텍스트 키와 특정 값을 설정합니다. 이러한 컨텍스트를 사용하여 확장 프로그램 명령 및 메뉴, 뷰와 같은 UI 요소를 선택적으로 활성화 또는 비활성화할 수 있습니다.
예를 들어, VS Code는 when 절을 사용하여 명령 키 바인딩을 활성화하거나 비활성화하며, 이는 기본 키 바인딩 JSON(기본 키 바인딩 열기(JSON))에서 볼 수 있습니다.
{ "key": "f5", "command": "workbench.action.debug.start",
"when": "debuggersAvailable && !inDebugMode" },
위에서 내장된 디버깅 시작 명령은 키보드 바로 가기 F5를 가지고 있으며, 이는 적절한 디버거를 사용할 수 있고(컨텍스트 키 debuggersAvailable가 true) 편집기가 디버그 모드가 아닐 때(컨텍스트 키 inDebugMode가 false)만 활성화됩니다.
조건 연산자
when 절은 컨텍스트 키(예: inDebugMode)로 구성되거나 더 미묘한 편집기 상태를 표현하기 위해 다양한 연산자를 사용할 수 있습니다.
논리 연산자
논리 연산자는 다른 논리, 등가, 비교, 일치, in/not in 연산자 또는 괄호로 묶인 표현식을 포함하는 간단한 컨텍스트 키 또는 when 절 표현식을 결합할 수 있습니다.
| 연산자 | 기호 | 예 |
|---|---|---|
| 아님 | ! |
"!editorReadonly" 또는 "!(editorReadonly || inDebugMode)" |
| 그리고 | && |
"textInputFocus && !editorReadonly" |
| 또는 | || |
"isLinux || isWindows" |
논리 연산자 우선순위에 대한 참고: 위의 표는 우선순위가 가장 높은 것부터 가장 낮은 것 순서로 연산자를 나열합니다. 예
| 작성 방식 | 해석 |
|---|---|
!foo && bar |
(!foo) && bar |
!foo || bar |
(!foo) || bar |
foo || bar && baz |
foo || (bar && baz) |
!foo && bar || baz |
(!foo && bar) || baz |
!(foo || bar) && baz |
(동일하게 유지) !(foo || bar) && baz |
등가 연산자
컨텍스트 키의 값을 특정 값과 비교하여 등가 여부를 확인할 수 있습니다. 오른쪽은 컨텍스트 키가 아닌 값으로 해석되며 컨텍스트에서 조회되지 않습니다.
| 연산자 | 기호 | 예 |
|---|---|---|
| 등가 | == |
"editorLangId == typescript" 또는 "editorLangId == 'typescript'" |
| 부등가 | != |
"resourceExtname != .js" 또는 "resourceExtname != '.js'" |
참고
- 오른쪽 값이 공백을 포함하는 문자열인 경우, 단일 따옴표로 묶어야 합니다. -
"resourceFilename == 'My New File.md'". ===는==와 동일한 동작을 하며,!==는!=와 동일한 동작을 합니다.
비교 연산자
컨텍스트 키의 값을 숫자를 기준으로 비교할 수 있습니다. 연산자의 왼쪽과 오른쪽은 공백으로 구분해야 합니다. - foo < 1, foo<1이 아닙니다.
| 연산자 | 기호 | 예 |
|---|---|---|
| 크다 | >, >= |
"gitOpenRepositoryCount >= 1"이지만 "gitOpenRepositoryCount>=1"은 아닙니다. |
| 작다 | <, <= |
"workspaceFolderCount < 2"이지만 "workspaceFolderCount<2"는 아닙니다. |
일치 연산자
(이전 이름: 키-값 쌍 일치 연산자)
| 연산자 | 기호 | 예 |
|---|---|---|
| 일치 | =~ |
"resourceScheme =~ /^untitled$|^file$/" |
when 절을 위한 일치 연산자(=~)가 있습니다. key =~ regularExpressionLiteral 표현식은 오른쪽을 정규 표현식 리터럴로 취급하여 왼쪽과 일치시킵니다. 예를 들어, 모든 Docker 파일에 대한 컨텍스트 메뉴 항목을 추가하려면 다음과 같이 사용할 수 있습니다.
"when": "resourceFilename =~ /docker/"
참고
=~연산자의 오른쪽은 JavaScript의 정규 표현식 리터럴과 동일한 규칙을 따르지만, JSON 문자열 및 정규 표현식 모두에 대한 이스케이프 규칙을 따라야 합니다. 예를 들어,file://부분 문자열과 일치하는 정규 표현식 리터럴은 JavaScript에서는/file:\/\//이지만, when 절에서는 백슬래시가 JSON 문자열에서 이스케이프되어야 하고 슬래시가 정규 표현식 패턴에서 이스케이프되어야 하므로/file:\\/\\//가 됩니다.!=~연산자는 존재하지 않지만, 일치 표현식을 부정할 수 있습니다. -!(foo =~ /baz/).
정규 표현식 플래그
정규 표현식 리터럴에 플래그를 사용할 수 있습니다. 예를 들어, resourceFilename =~ /json/i 또는 myContextKey =~ /baz/si.
지원되는 플래그: i, s, m, u.
무시되는 플래그: g, y.
'in' 및 'not in' 조건 연산자
when 절의 in 연산자는 다른 컨텍스트 키의 값 내에서 컨텍스트 키의 값을 동적으로 조회할 수 있습니다. 예를 들어, 특정 유형의 파일(또는 정적으로 알 수 없는 것)을 포함하는 폴더에 컨텍스트 메뉴 명령을 추가하려면 이제 in 연산자를 사용하여 이를 달성할 수 있습니다. not in 연산자를 사용하여 반대 조건을 확인할 수 있습니다.
| 연산자 | 기호 | 예 |
|---|---|---|
| In | in |
"resourceFilename in supportedFolders" |
| Not in | not in |
"resourceFilename not in supportedFolders" |
먼저 명령을 지원해야 하는 폴더를 결정하고 폴더 이름을 배열에 추가합니다. 그런 다음, setContext 명령을 사용하여 배열을 컨텍스트 키로 지정합니다.
vscode.commands.executeCommand('setContext', 'ext.supportedFolders', [
'test',
'foo',
'bar'
]);
// or
// Note in this case (using an object), the value doesn't matter, it is based on the existence of the key in the object
// The value must be of a simple type
vscode.commands.executeCommand('setContext', 'ext.supportedFolders', {
test: true,
foo: 'anything',
bar: false
});
그런 다음 package.json에서 explorer/context 메뉴에 대한 메뉴 기여를 추가할 수 있습니다.
// Note, this assumes you have already defined a command called ext.doSpecial
"menus": {
"explorer/context": [
{
"command": "ext.doSpecial",
"when": "explorerResourceIsFolder && resourceFilename in ext.supportedFolders"
}
]
}
이 예제에서는 resourceFilename(이 경우 폴더 이름)의 값을 가져와 ext.supportedFolders의 값 내에 존재 여부를 확인합니다. 존재하면 메뉴가 표시됩니다. 이 강력한 연산자를 통해 메뉴, 뷰 등 when 절을 지원하는 더 풍부한 조건부 및 동적 기여를 할 수 있습니다.
사용 가능한 컨텍스트 키
아래는 부울 true/false로 평가되는 사용 가능한 컨텍스트 키 중 일부입니다.
이 목록이 완전하지는 않으며, 키 바인딩 편집기(키 바인딩 열기)에서 검색 및 필터링하거나 기본 키 바인딩 JSON 파일(기본 키 바인딩 열기(JSON))을 검토하여 다른 when 절 컨텍스트를 찾을 수 있습니다. 또한 컨텍스트 키 검사 유틸리티를 사용하여 관심 있는 컨텍스트 키를 식별할 수 있습니다.
| 컨텍스트 이름 | true일 때 |
|---|---|
| 편집기 컨텍스트 | |
editorFocus |
텍스트 또는 위젯이든 편집기에 포커스가 있습니다. |
editorTextFocus |
편집기 텍스트에 포커스가 있습니다 (커서가 깜박입니다). |
textInputFocus |
모든 편집기에 포커스가 있습니다 (일반 편집기, 디버그 REPL 등). |
inputFocus |
모든 텍스트 입력 영역에 포커스가 있습니다 (편집기 또는 텍스트 상자). |
editorTabMovesFocus |
Tab 키가 편집기에서 포커스를 이동하는지 여부. |
editorHasSelection |
편집기에서 텍스트가 선택되었습니다. |
editorHasMultipleSelections |
여러 텍스트 영역이 선택되었습니다 (다중 커서). |
editorReadonly |
편집기가 읽기 전용입니다. |
editorLangId |
편집기의 해당 언어 ID와 일치할 때 true입니다. 예: "editorLangId == typescript". |
isInDiffEditor |
활성 편집기는 차이 편집기입니다. |
isInEmbeddedEditor |
포커스가 포함된 편집기 안에 있을 때 true입니다. |
| 운영 체제 컨텍스트 | |
isLinux |
OS가 Linux일 때 true입니다. |
isMac |
OS가 macOS일 때 true입니다. |
isWindows |
OS가 Windows일 때 true입니다. |
isWeb |
웹에서 편집기에 액세스할 때 true입니다. |
| 목록 컨텍스트 | |
listFocus |
목록에 포커스가 있습니다. |
listSupportsMultiselect |
목록이 다중 선택을 지원합니다. |
listHasSelectionOrFocus |
목록에 선택 또는 포커스가 있습니다. |
listDoubleSelection |
목록에 2개의 요소가 선택되어 있습니다. |
listMultiSelection |
목록에 여러 요소가 선택되어 있습니다. |
| 모드 컨텍스트 | |
inSnippetMode |
편집기가 스니펫 모드에 있습니다. |
inQuickOpen |
빠른 열기 드롭다운에 포커스가 있습니다. |
| 리소스 컨텍스트 | |
resourceScheme |
리소스 Uri 스키마와 일치할 때 true입니다. 예: "resourceScheme == file" |
resourceFilename |
탐색기 또는 편집기 파일 이름과 일치할 때 true입니다. 예: "resourceFilename == gulpfile.js" |
resourceExtname |
탐색기 또는 편집기 파일 이름 확장자와 일치할 때 true입니다. 예: "resourceExtname == .js" |
resourceDirname |
탐색기 또는 편집기의 리소스 절대 폴더 경로와 일치할 때 true입니다. 예: "resourceDirname == /users/alice/project/src" |
resourcePath |
탐색기 또는 편집기의 리소스 절대 경로와 일치할 때 true입니다. 예: "resourcePath == /users/alice/project/gulpfile.js" |
resourceLangId |
탐색기 또는 편집기 제목의 언어 ID와 일치할 때 true입니다. 예: "resourceLangId == markdown" |
isFileSystemResource |
탐색기 또는 편집기 파일이 파일 시스템 공급자가 처리할 수 있는 파일 시스템 리소스일 때 true입니다. |
resourceSet |
탐색기 또는 편집기 파일이 설정되었을 때 true입니다. |
resource |
탐색기 또는 편집기 파일의 전체 Uri. |
| 탐색기 컨텍스트 | |
explorerViewletVisible |
탐색기 뷰가 보이면 true입니다. |
explorerViewletFocus |
탐색기 뷰에 키보드 포커스가 있으면 true입니다. |
filesExplorerFocus |
파일 탐색기 섹션에 키보드 포커스가 있으면 true입니다. |
openEditorsFocus |
열린 편집기 섹션에 키보드 포커스가 있으면 true입니다. |
explorerResourceIsFolder |
탐색기에서 폴더가 선택되면 true입니다. |
| 편집기 위젯 컨텍스트 | |
findWidgetVisible |
편집기 찾기 위젯이 보입니다. |
suggestWidgetVisible |
제안 위젯(IntelliSense)이 보입니다. |
suggestWidgetMultipleSuggestions |
여러 제안이 표시됩니다. |
renameInputVisible |
이름 바꾸기 입력 텍스트 상자가 보입니다. |
referenceSearchVisible |
참조 검색 보기 창이 열려 있습니다. |
inReferenceSearchEditor |
참조 검색 보기 편집기에 포커스가 있습니다. |
config.editor.stablePeek |
보기 편집기를 유지합니다(editor.stablePeek 설정으로 제어됨). |
codeActionMenuVisible |
코드 액션 메뉴가 보입니다. |
parameterHintsVisible |
매개변수 힌트가 보입니다(editor.parameterHints.enabled 설정으로 제어됨). |
parameterHintsMultipleSignatures |
여러 매개변수 힌트가 표시됩니다. |
| 디버거 컨텍스트 | |
debuggersAvailable |
적절한 디버거 확장을 사용할 수 있습니다. |
inDebugMode |
디버그 세션이 실행 중입니다. |
debugState |
활성 디버거 상태. 가능한 값: inactive, initializing, stopped, running. |
debugType |
디버그 유형과 일치할 때 true입니다. 예: "debugType == 'node'". |
inDebugRepl |
디버그 콘솔 REPL에 포커스가 있습니다. |
| 통합 터미널 컨텍스트 | |
terminalFocus |
통합 터미널에 포커스가 있습니다. |
terminalIsOpen |
통합 터미널이 열렸습니다. |
| 타임라인 뷰 컨텍스트 | |
timelineFollowActiveEditor |
타임라인 뷰가 활성 편집기를 따를 때 true입니다. |
| 타임라인 항목 컨텍스트 | |
timelineItem |
타임라인 항목의 컨텍스트 값이 일치할 때 true입니다. 예: "timelineItem =~ /git:file:commit\\b/". |
| 확장 컨텍스트 | |
extension |
확장의 ID와 일치할 때 true입니다. 예: "extension == eamodio.gitlens". |
extensionStatus |
확장이 설치되었을 때 true입니다. 예: "extensionStatus == installed". |
extensionHasConfiguration |
확장에 구성이 있으면 true입니다. |
| 전역 UI 컨텍스트 | |
notificationFocus |
알림에 키보드 포커스가 있습니다. |
notificationCenterVisible |
알림 센터가 VS Code 오른쪽 하단에 표시됩니다. |
notificationToastsVisible |
알림 토스트가 VS Code 오른쪽 하단에 표시됩니다. |
searchViewletVisible |
검색 뷰가 열려 있습니다. |
sideBarVisible |
사이드 바가 표시됩니다. |
sideBarFocus |
사이드 바에 포커스가 있습니다. |
panelFocus |
패널에 포커스가 있습니다. |
inZenMode |
창이 Zen 모드입니다. |
isCenteredLayout |
편집기가 중앙 레이아웃 모드입니다. |
workbenchState |
empty, folder(폴더 1개) 또는 workspace가 될 수 있습니다. |
workspaceFolderCount |
작업 영역 폴더 수. |
replaceActive |
검색 뷰 바꾸기 텍스트 상자가 열려 있습니다. |
view |
view/title 및 view/item/context의 경우 명령을 표시할 뷰입니다.예: "view == myViewsExplorerID". |
viewItem |
view/item/context의 경우 트리 항목의 contextValue입니다.예: "viewItem == someContextValue". |
webviewId |
webview/context의 경우 명령을 표시할 웹뷰 ID입니다.예: "webviewId == catCoding". |
isFullscreen |
창이 전체 화면일 때 true입니다. |
focusedView |
현재 포커스가 있는 뷰의 식별자입니다. |
canNavigateBack |
뒤로 이동할 수 있으면 true입니다. |
canNavigateForward |
앞으로 이동할 수 있으면 true입니다. |
canNavigateToLastEditLocation |
마지막 편집 위치로 이동할 수 있으면 true입니다. |
| 전역 편집기 UI 컨텍스트 | |
textCompareEditorVisible |
하나 이상의 차이(비교) 편집기가 표시됩니다. |
textCompareEditorActive |
차이(비교) 편집기가 활성화되었습니다. |
editorIsOpen |
편집기 하나가 열려 있으면 true입니다. |
groupEditorsCount |
그룹 내 편집기 수. |
activeEditorGroupEmpty |
활성 편집기 그룹에 편집기가 없으면 true입니다. |
activeEditorGroupIndex |
편집기 그리드에서 편집기 그룹의 위치를 나타내는 1부터 시작하는 숫자입니다.인덱스 1인 그룹은 왼쪽 상단 모서리에 있는 첫 번째 그룹입니다. |
activeEditorGroupLast |
편집기 그리드의 마지막 편집기 그룹에 대해 true입니다. |
multipleEditorGroups |
여러 편집기 그룹이 있으면 true입니다. |
activeEditor |
그룹 내 활성 편집기의 식별자입니다. |
activeEditorIsDirty |
그룹 내 활성 편집기가 더티이면 true입니다. |
activeEditorIsNotPreview |
그룹 내 활성 편집기가 미리 보기 모드가 아니면 true입니다. |
activeEditorIsPinned |
그룹 내 활성 편집기가 고정되어 있으면 true입니다. |
inSearchEditor |
검색 편집기 내부에 포커스가 있으면 true입니다. |
activeWebviewPanelId |
현재 활성 웹뷰 패널의 ID입니다. |
activeCustomEditorId |
현재 활성 사용자 지정 편집기의 ID입니다. |
| 설정 컨텍스트 | |
config.editor.minimap.enabled |
editor.minimap.enabled 설정이 true일 때 true입니다. |
참고:
"config."접두사를 사용하여 부울 값으로 평가되는 모든 사용자 또는 작업 영역 설정을 여기에 사용할 수 있습니다.
표시/포커스 뷰 when 절 컨텍스트
특정 뷰가 표시되거나 포커스되었는지 확인하는 when 절을 가질 수 있습니다.
| 컨텍스트 이름 | true일 때 |
|---|---|
view.${viewId}.visible |
특정 뷰가 표시되면 true입니다. 예: "view.workbench.explorer.fileView.visible" |
focusedView |
특정 뷰에 포커스가 있으면 true입니다. 예: "focusedView == 'workbench.explorer.fileView'" |
뷰 식별자
workbench.explorer.fileView- 파일 탐색기workbench.explorer.openEditorsView- 열린 편집기outline- 개요 뷰timeline- 타임라인 뷰workbench.scm- 소스 제어workbench.scm.repositories- 소스 제어 리포지토리workbench.debug.variablesView- 변수workbench.debug.watchExpressionsView- 감시workbench.debug.callStackView- 호출 스택workbench.debug.loadedScriptsView- 로드된 스크립트workbench.debug.breakPointsView- 중단점workbench.debug.disassemblyView- 역어workbench.views.extensions.installed- 설치된 확장extensions.recommendedList- 추천 확장workbench.panel.markers.view- 문제workbench.panel.output- 출력workbench.panel.repl.view- 디버그 콘솔terminal- 통합 터미널workbench.panel.comments- 주석
표시 뷰 컨테이너 when 절 컨텍스트
특정 뷰 컨테이너가 표시되는지 확인하는 when 절을 가질 수 있습니다.
| 컨텍스트 이름 | true일 때 |
|---|---|
activeViewlet |
사이드바에 뷰 컨테이너가 표시되면 true입니다. 예: "activeViewlet == 'workbench.view.explorer'" |
activePanel |
패널에 뷰 컨테이너가 표시되면 true입니다. 예: "activePanel == 'workbench.panel.output'" |
activeAuxiliary |
보조 사이드바에 뷰 컨테이너가 표시되면 true입니다. 예: "activeAuxiliary == 'workbench.view.debug'" |
뷰 컨테이너 식별자
workbench.view.explorer- 파일 탐색기workbench.view.search- 검색workbench.view.scm- 소스 제어workbench.view.debug- 실행workbench.view.extensions- 확장workbench.panel.markers- 문제workbench.panel.output- 출력workbench.panel.repl- 디버그 콘솔terminal- 통합 터미널workbench.panel.comments- 주석
특정 뷰 컨테이너에 포커스가 있을 때만 활성화되는 when 절을 원하면, activeViewlet 또는 activePanel 또는 activeAuxiliary 컨텍스트 키와 함께 sideBarFocus 또는 panelFocus 또는 auxiliaryBarFocus를 사용하십시오.
예를 들어, 아래의 when 절은 파일 탐색기에 포커스가 있을 때만 true입니다.
"sideBarFocus && activeViewlet == 'workbench.view.explorer'"
when 절에서 설정 확인
when 절에서 config. 접두사를 사용하여 설정 값에 참조할 수 있습니다. 예를 들어 config.editor.tabCompletion 또는 config.breadcrumbs.enabled.
사용자 지정 when 절 컨텍스트 추가
자신만의 VS Code 확장을 작성 중이고 when 절 컨텍스트를 사용하여 명령, 메뉴 또는 뷰를 활성화/비활성화해야 하지만 기존 키가 요구 사항을 충족하지 않는 경우, setContext 명령으로 자체 컨텍스트 키를 추가할 수 있습니다.
아래 첫 번째 예는 myExtension.showMyCommand 키를 true로 설정하며, 이는 명령 활성화 또는 when 속성과 함께 사용할 수 있습니다. 두 번째 예는 2개보다 많은 흥미로운 열린 항목 수를 확인하는 when 절과 함께 사용할 수 있는 값을 저장합니다.
vscode.commands.executeCommand('setContext', 'myExtension.showMyCommand', true);
vscode.commands.executeCommand('setContext', 'myExtension.numberOfCoolOpenThings', 4);
컨텍스트 키 검사 유틸리티
런타임에 현재 활성화된 모든 컨텍스트 키를 보려면 명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))에서 개발자: 컨텍스트 키 검사 명령을 사용할 수 있습니다. 컨텍스트 키 검사는 VS Code 개발자 도구 콘솔 탭(도움말 > 개발자 도구 토글)에 컨텍스트 키와 해당 값을 표시합니다.
개발자: 컨텍스트 키 검사를 실행하면 커서가 VS Code UI의 요소를 강조 표시하고 요소를 클릭하면 현재 컨텍스트 키와 해당 상태가 객체로 콘솔에 출력됩니다.

활성 컨텍스트 키 목록은 방대하며 설치한 확장의 사용자 지정 컨텍스트 키를 포함할 수 있습니다.
참고: 일부 컨텍스트 키는 VS Code 내부 용이며 향후 변경될 수 있습니다.