이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

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/titleview/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의 요소를 강조 표시하고 요소를 클릭하면 현재 컨텍스트 키와 해당 상태가 객체로 콘솔에 출력됩니다.

Inspect Context Keys output

활성 컨텍스트 키 목록은 방대하며 설치한 확장의 사용자 지정 컨텍스트 키를 포함할 수 있습니다.

참고: 일부 컨텍스트 키는 VS Code 내부 용이며 향후 변경될 수 있습니다.

© . This site is unofficial and not affiliated with Microsoft.