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

2023년 8월 (버전 1.82)

업데이트 1.82.1: 이 업데이트는 해당 보안 이슈를 해결합니다.

업데이트 1.82.2: 이 업데이트는 해당 이슈들을 해결합니다.

업데이트 1.82.3: 이 업데이트는 해당 보안 이슈를 해결합니다.

다운로드: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Visual Studio Code의 2023년 8월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아하실 만한 많은 업데이트가 포함되어 있습니다. 주요 하이라이트는 다음과 같습니다.

이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com업데이트로 이동하십시오.

Insider: 새로운 기능을 최대한 빨리 사용해 보고 싶으신가요? 야간 빌드인 Insider 빌드를 다운로드하고 사용 가능한 최신 업데이트를 즉시 사용해 보세요.

접근성

창 제목의 포커스 보기

window.title 설정에 이제 ${focusedView} 변수가 포함되어, 뷰가 현재 포커스되어 있다면 제목 표시줄에 뷰의 이름이 표시됩니다.

인라인 완성을 위한 접근 가능한 보기

예를 들어, GitHub Copilot 확장 프로그램에서 오는 것과 같은 인라인 완성은 이제 접근 가능한 보기에서 검사할 수 있습니다.

워크벤치 전반에 걸친 탐색 일관성 개선

지난 반복에서 입력 컨트롤(예: 검색 또는 필터 입력)과 해당 결과 간의 탐색 경험을 확장 기능 보기, 키보드 바로 가기 편집기 등과 같은 구성 요소 전반에 걸쳐 일관되게 만들었습니다. 이를 위해 ⌘↓ (Windows, Linux Ctrl+Down)⌘↑ (Windows, Linux Ctrl+Up)를 사용했습니다. 이제 설정 편집기와 GitHub Pull Request 댓글 컨트롤에도 확장되었습니다.

이것은 터미널과 터미널 접근 가능 버퍼 간의 탐색에도 적용됩니다.

업데이트된 터미널 접근 가능 버퍼 키 바인딩

이전에는 터미널 접근 가능 버퍼가 Shift+Tab을 통해 열렸습니다. 이것은 일부 셸에서 기존 키보드 바로 가기와 충돌했습니다. 따라서 다른 접근 가능한 보기와 일치시키기 위해 해당 키 바인딩을 제거하고 ⌘↓ (Windows, Linux Ctrl+Down)⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)를 사용하도록 변경했습니다.

접근 가능한 보기의 작업

접근 가능한 보기의 작업은 화면 판독기 사용자가 특정 기능에 대해 다음/이전으로 이동하고, 접근성 상세 정보를 비활성화하는 등의 작업을 할 수 있게 합니다. 이러한 작업은 현재 컨텍스트를 유지할 수 있도록 보기의 편리한 도구 모음 내에 있습니다.

접근 가능한 보기에서 기호로 이동

접근성 도움말 대화 상자와 일부 접근 가능한 보기에는 콘텐츠를 더 빠르게 탐색할 수 있도록 기호로 이동 (⇧⌘O (Windows, Linux Ctrl+Shift+O)) 작업이 추가되었습니다.

실행 후 터미널 접근 가능 버퍼 포커스

터미널에 이제 terminal.integrated.focusAfterRun 설정이 있어 사용자가 터미널: 활성 터미널에서 선택한 텍스트 실행을 호출할 때 터미널의 접근 가능 버퍼(accessible-buffer), 터미널 자체(terminal) 또는 아무것도(none) 포커스되어야 하는지 지정할 수 있습니다.

워크벤치

내장 포트 포워딩

VS Code에 이제 내장 포트 포워딩 시스템이 있습니다. 이 기능은 로컬에서 실행되는 서비스를 인터넷을 통해 다른 사람 및 장치와 공유할 수 있게 합니다. 사용하려면 패널 영역에서 사용 가능한 포트 보기의 포트 전달 버튼을 선택하세요 (Ports: Focus on Ports View).

Forward a Port button displayed in the Ports view

테마: Codesong (vscode.dev에서 미리보기)

포트 포워딩에 대한 자세한 내용은 포트 포워딩 사용자 가이드를 참조하세요.

명령 센터가 이제 기본으로 활성화됨

명령 센터는 몇 달 전에 VS Code를 빠르게 검색하고 상호 작용할 수 있는 방법으로 도입되었습니다. 이를 명령 팔레트에서 명령을 찾고, 작업을 실행하고, 기타 빠른 경험을 위한 시작 패드로 사용할 수 있습니다. 제목 표시줄에 명령 센터를 표시하는 실험을 진행했으며 긍정적인 피드백을 받았기 때문에 기본값으로 활성화할 때라고 생각했습니다.

명령 센터와 뒤로/앞으로 버튼을 사용하는 영상은 다음과 같습니다.

VS Code에서 모든 것을 찾는 중심이 될 명령 센터의 엄청난 잠재력을 보고 있으며, 앞으로 더 많은 개선 사항을 기대해 주세요!

참고: 명령 센터를 표시하고 싶지 않다면 제목 표시줄을 마우스 오른쪽 버튼으로 클릭하고 드롭다운에서 명령 센터 항목의 선택을 해제하여 숨길 수 있습니다.

키보드 또는 마우스로 고정된 편집기 닫기 제어

고정된 탭이 키보드 바로 가기 또는 마우스 가운데 클릭에 어떻게 반응하는지에 대한 더 많은 제어를 위해 새로운 설정 workbench.editor.preventPinnedEditorClose가 있습니다. 기본적으로 고정된 탭은 키보드 또는 마우스 상호 작용으로 닫히지 않습니다(기본값 keyboardAndMouse). 이 설정을 적절하게 변경할 수 있습니다.

  • keyboardAndMouse - 고정된 탭은 키보드 바로 가기 또는 마우스 가운데 클릭으로 닫히지 않습니다 (1.82.x부터 기본값).
  • keyboard - 고정된 탭은 키보드 바로 가기로 닫히지 않습니다 (1.81.x까지 기본값).
  • mouse - 고정된 탭은 마우스 가운데 클릭으로 닫히지 않습니다.
  • never - 고정된 탭은 키보드 바로 가기 또는 마우스 가운데 클릭으로 항상 닫힙니다.

상태 표시줄에 대한 새롭고 업데이트된 테마 색상

상태 표시줄에는 이미 항목에 대한 많은 테마 색상이 제공됩니다. 이제 마우스 오버 전면 및 배경 색상을 테마로 지정할 수 있는 더 많은 색상이 추가되었습니다.

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

다음 두 가지 색상 이름은 색상이 더 이상 전체 상태 표시줄에 적용되지 않고 원격 표시기에만 적용되므로 업데이트되었습니다.

  • statusBar.offlineBackgroundstatusBarItem.offlineBackground로 이름 변경됨
  • statusBar.offlineForegroundstatusBarItem.offlineForeground로 이름 변경됨

편집기

고정 스크롤

이번 반복에서는 편집기 상단 (보기: 고정 스크롤 토글)에서 사용할 수 있는 고정 스크롤 UI에 몇 가지 개선 사항이 적용되었습니다.

  • 이제 편집기 가로 스크롤바가 스크롤될 때 기본적으로 고정 스크롤이 옆으로 스크롤됩니다. 이 기능은 editor.stickyScroll.scrollWithEditor를 비활성화하여 끌 수 있습니다.
  • Shift 키를 누르고 고정 스크롤 줄에 마우스를 올리면 범위의 마지막 줄을 볼 수 있습니다. Shift를 누른 상태에서 줄을 클릭하면 편집기 커서가 해당 범위의 마지막 줄로 이동합니다.
  • 고정 스크롤 여백에 접기 아이콘이 추가되었습니다. 이러한 아이콘의 렌더링은 편집기 여백의 접기 아이콘 렌더링을 제어하는 editor.showFoldingControls 설정을 따릅니다.

저장 시 JSON 정렬

이제 저장 시 JSON 또는 JSONC(주석이 포함된 JSON) 파일을 정렬할 수 있습니다. 이 기능을 활성화하려면 json.sortOnSave.enable 설정을 사용하세요.

키보드를 통한 코드 작업 및 빠른 수정 탐색

이제 빠른 수정, 코드 작업 또는 소스 제어 메뉴(이들은 "작업" 컨트롤을 사용)에서 사용 가능한 메뉴 옵션에 해당하는 모든 키워드나 문자를 입력하여 빠르게 탐색할 수 있습니다. 필터는 퍼지 매칭을 활용하며 검색은 첫 글자나 접두사에 국한되지 않고 전체 레이블 텍스트도 포함합니다.

Example of searching "Surround" or "Read" in the Refactor menu

Diff 에디터

이번 릴리스에서는 새로운 diff 에디터를 기본으로 활성화했습니다. 또한 새로운 diff 에디터 기능 중 일부를 개선하고 많은 버그를 수정했습니다.

이동된 코드 감지

이번 반복에서는 이동된 코드 감지 기능을 개선했습니다. "diffEditor.experimental.showMoves": true 또는 diff 에디터 컨텍스트 메뉴에서 활성화할 수 있습니다. 활성화하면 같은 파일 내에서 다른 위치로 이동된 코드 블록이 감지되고 코드 블록이 이동된 위치를 나타내는 화살표가 그려집니다.

이동된 코드는 약간 수정된 경우에도 감지됩니다. 비교 버튼을 사용하여 이동 전후의 블록을 비교할 수 있습니다.

Moved code detection demo

변경되지 않은 코드 헤더 접기

"diffEditor.hideUnchangedRegions.enabled": true를 사용하거나 에디터 컨텍스트 메뉴에서 지도 아이콘을 선택하여 변경되지 않은 코드 블록을 접으세요.

이번 릴리스에서는 접힌 코드 블록에 대한 탐색 경로가 추가되어 어떤 기호가 접혔는지 표시됩니다. 탐색 경로 항목을 클릭하면 선택한 항목이 표시됩니다.

Collapsed code headers

동적 레이아웃

diff 에디터의 너비가 너무 좁으면 에디터가 자동으로 인라인 보기로 전환됩니다. 에디터가 다시 충분히 넓어지면 이전 레이아웃이 복원됩니다. 이 동작을 비활성화하려면 "diffEditor.useInlineViewWhenSpaceIsLimited": false를 설정하세요.

버튼 토글 상태

diff 에디터의 버튼 토글 스타일을 더 잘 보이도록 업데이트했습니다.

이전 토글 스타일(선택되지 않음 및 선택됨)으로 흐릿하게 선택되지 않은 버튼 표시

Old, untoggled dim buttons, Old, toggled

새로운 토글 스타일(선택되지 않음 및 선택됨)로 음영 처리된 선택된 배경 표시

New, untoggled visible buttons, New, toggled with shaded background

터미널

시작 시 터미널 복원 방법 제어

새로운 설정 terminal.integrated.hideOnStartup은 애플리케이션 시작 시 터미널이 자동으로 생성되는지 여부를 제어합니다. 다음과 같은 옵션을 사용할 수 있습니다.

  • never (기본값): 시작 시 터미널 보기를 숨기지 않습니다.
  • whenEmpty: 지속적인 세션이 복원되지 않은 경우에만 터미널을 숨깁니다.
  • always: 지속적인 세션이 복원된 경우에도 항상 터미널을 숨깁니다.

괄호 붙여넣기 모드 비활성화

괄호 붙여넣기 모드는 붙여넣은 텍스트를 특수 시퀀스로 래핑하여 셸에서 해당 정보를 사용할 수 있게 하는 터미널 기능입니다. 이 기능을 활성화하는 셸은 이를 제대로 지원하도록 설계되었지만, 문제가 발생하여 붙여넣을 때 [201~와 같은 텍스트가 예상치 않게 표시될 수 있습니다. 이 기능은 이제 명시적으로 비활성화할 수 있으며, 셸에서 요청하더라도 이 기능을 비활성화합니다.

실행 후 터미널 포커스 설정

터미널에 이제 terminal.integrated.focusAfterRun 설정이 있어 사용자가 터미널: 활성 터미널에서 선택한 텍스트 실행을 호출할 때 터미널이 포커스되어야 하는지 지정할 수 있습니다. 다른 옵션으로는 터미널의 접근 가능 버퍼(accessible-buffer)에 포커스하거나 아무것도 포커스하지 않는 것(none)이 있습니다.

크기 조절 가능한 찾기

터미널의 찾기 컨트롤은 이제 에디터와 마찬가지로 왼쪽에 있는 새시를 사용하여 크기를 조절할 수 있습니다.

Hover the left border of the Find control to see the resize handle

새시 위에 마우스를 올리거나 드래그하여 찾기 컨트롤 크기를 조절할 때 강조 표시됩니다.

GPU 가속이 비활성화되었을 때 렌더링 속도 향상

GPU 가속이 비활성화되었을 때 사용되는 "DOM 렌더러"의 성능은 구성 요소 재작성 덕분에 크게 향상되었습니다. 재작성은 사용된 DOM 요소 수를 줄이는 데 중점을 두었고, 터미널이 클수록 절감 효과가 훨씬 더 잘 확장됩니다.

117열 36행 터미널에서 일반적인 렌더 호출을 테스트했을 때, 이전에는 약 10ms, 이후에는 약 2ms가 걸렸습니다. 테스트 머신에서 터미널 크기를 300x100으로 늘렸을 때, 렌더링은 이전에는 약 25-35ms, 이후에는 약 4-5ms가 걸렸습니다.

더 나은 선택 영역 렌더링

GPU 가속이 꺼져 있을 때 선택 영역 렌더링은 이제 webgl 렌더러와 동일하며, 모든 배경이 테마의 선택 배경 색상으로 변경되어 좋은 대비와 일관성을 보장합니다.

The background when selected will now be the same as the rest of the selection

흐릿한 텍스트에 대해 최소 대비 비율 절반 존중

터미널의 최소 대비 비율 기능은 터미널의 전경 색상에 대한 제어를 더 많이 하여 특정 대비 비율로 표시되도록 합니다. 이 기능의 이전 문제점 중 하나는 흐릿한 텍스트(CSI 2 m)도 대비 비율을 존중하여 일반 텍스트만큼 눈에 띄게 보일 수 있다는 점이었습니다. PowerShell의 자동 완성 미리 보기 텍스트는 이 기능이 제대로 작동하지 않은 예입니다.

흐릿한 텍스트는 이제 대비 요구 사항의 **절반**을 가집니다. 이것은 텍스트가 더 이상 최소 대비 비율을 충족하지 않을 수 있다는 것을 의미하지만, 일반 텍스트와 명확하게 다르므로 더 중요합니다.

Now dimmed text should be visually different for typical minimum contrast ratios

포커스가 없을 때 커서 모양 구성

터미널에서 포커스가 없을 때 커서의 모양은 이제 terminal.integrated.cursorStyleInactive로 구성할 수 있습니다. 이는 기존 terminal.integrated.cursorStyle의 모든 스타일을 지원하며, outline (기본값) 및 none도 포함합니다.

The new inactive cursor styles are underline, block, line, outline and none

감지된 링크 열기 명령 (⇧⌘O (Windows, Linux Ctrl+Shift+O)) 동작이 높은 성능을 유지하면서 전체 터미널 버퍼에서 링크를 검색하는 것을 훨씬 더 쉽게 만들기 위해 변경되었습니다. 이전에는 뷰포트와 그 바로 위쪽의 링크만 제공하고 나머지 버퍼를 검색하려면 끝에 번거로운 더 많은 링크 표시 버튼이 있었습니다.

Previously the last entry must have been selected to search everything

이제 뷰포트의 링크가 즉시 표시되므로 빠른 선택이 가능한 한 빨리 표시될 수 있습니다.

Now initial results are restricted to the initial viewport

빠른 선택 표시줄이 표시되는 즉시 나머지 터미널 버퍼에 대한 링크가 백그라운드에서 감지됩니다. 필터링을 위해 입력할 때 VS Code는 모든 결과를 기다리고 필터링된 결과에 포함합니다.

Results from the entire buffer are included in the search when filtering begins

CodeQL.yml은 필터를 입력해야만 포함된 것을 볼 수 있는데, 이는 뷰포트 밖에 있었기 때문입니다.

다음 GNU 스타일 링크 형식이 이제 터미널에서 감지됩니다.

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

디버그

JavaScript 디버거

WebAssembly 디버깅

JavaScript 디버거는 이제 WebAssembly 모듈을 WebAssembly 텍스트 형식으로 자동 디컴파일하고, 디컴파일된 모듈에서 단계를 추적하고 중단점을 설정할 수 있게 합니다.

Breakpoint hit during a WebAssembly debug session

테마: Codesong (vscode.dev에서 미리보기)

소스 맵 로딩 개선

이번 릴리스에서는 소스 맵을 로드하는 방식에 많은 개선이 이루어졌습니다.

  • 일부 일반적인 경우(예: tsc 명령줄로 컴파일된 애플리케이션)에는 소스 맵 로딩이 3-5배 빨라집니다.
  • 이제 Vite 개발 서버의 핫 모듈 리로딩을 지원합니다.
  • 소스 맵은 이제 인증된 엔드포인트에서 자동으로 로드할 수 있습니다.

테스트

개선된 상태 영역

테스트 보기의 필터 상자 아래에 있는 '상태 영역'이 더 간결해졌으며, 가장 최근에 실행된 테스트를 다시 실행할 수 있는 클릭 가능한 작업을 제공합니다. 다시 실행 버튼을 클릭할 때 Alt를 누르고 있으면 대신 해당 테스트를 디버그합니다.

Testing view status area displaying test result count, test timing, and rerun button

이제 테스트 출력이 표시되는 터미널에서 링크 감지가 실행됩니다. 파일 이름, 경로 및 URI를 이제 클릭할 수 있습니다.

테스트와 관련된 출력 경험 개선

테스트 확장 프로그램은 콘솔 출력을 특정 테스트 또는 위치와 연결할 수 있습니다. 이전에는 이 방식으로 생성된 각 출력은 테스트 결과 보기에서 자체 항목으로 표시되었고 선택 시 텍스트 편집기에서 열렸습니다.

이제 올바른 터미널에 표시되며, 출력 메시지로 이동하면 해당 테스트의 출력이 표시된 터미널이 열리고 메시지가 선택됩니다.

노트북

셀 출력 복사

셀 출력 메뉴에 출력을 시스템 클립보드로 복사하는 옵션이 포함되었습니다. 컨텍스트 메뉴를 사용하여 이미지 출력의 경우 이미지를 마우스 오른쪽 버튼으로 클릭하고 출력 복사 명령을 선택할 수도 있습니다.

테마: Bearded Theme feat. Gold D Raynh (vscode.dev에서 미리보기)

언어

TypeScript 5.2

VS Code는 이제 TypeScript 5.2.2를 제공합니다. 이 주요 업데이트는 새로운 TypeScript 언어 기능, 성능 향상, 그리고 많은 중요한 개선 및 버그 수정을 제공합니다. TypeScript 5.2에 대한 내용은 TypeScript 블로그에서 읽을 수 있습니다.

파일로 이동 리팩토링

JavaScript 및 TypeScript의 파일로 이동 리팩토링을 사용하면 클래스, 함수 또는 상수를 기존 파일로 이동할 수 있습니다. 또한 기호에 대한 모든 참조를 자동으로 업데이트하고 필요한 경우 가져오기를 업데이트합니다.

파일로 이동을 선택하면 VS Code는 현재 TypeScript 또는 JavaScript 프로젝트의 모든 파일 목록을 표시합니다. 파일을 빠르게 필터링하려면 입력할 수 있습니다.

또는 기존 파일 선택...을 사용하여 일반 파일 선택기로 파일을 선택하거나 새 파일 경로 입력...을 사용하여 생성될 새 파일을 지정할 수 있습니다.

변수 인라인 리팩토링

JavaScript 및 TypeScript의 변수 인라인 리팩토링은 변수의 모든 발생을 해당 상수 값으로 대체합니다.

이 리팩토링은 기존 코드를 다시 작성할 때 가장 유용합니다. 예를 들어, 변수가 선언된 다음 즉시 반환되는 경우 변수 인라인을 사용하여 추가 선언을 제거하고 값을 직접 반환할 수 있습니다.

function add(a, b) {
  const result = a + b;
  return result;
}

inline variableresult에 대해 실행한 후

function add(a, b) {
  return a + b;
}

클릭 가능한 매개변수 힌트

이제 매개변수 힌트를 클릭하여 매개변수 선언으로 빠르게 이동할 수 있습니다. 다음을 사용하여 인라인 힌트를 활성화한 후

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

Ctrl/Cmd를 누른 상태에서 매개변수 이름을 클릭하면 해당 매개변수의 선언으로 이동합니다.

향후 릴리스에서는 다른 JavaScript 및 TypeScript 인라인 힌트에 대한 정의로 이동을 활성화할 계획입니다.

원격 개발

원격 개발 확장 프로그램을 사용하면 개발 컨테이너, SSH 또는 원격 터널을 통해 원격 머신 또는 Windows Subsystem for Linux(WSL)를 완전한 기능을 갖춘 개발 환경으로 사용할 수 있습니다.

주요 내용은 다음과 같습니다.

  • 더 나은 원격 - 터널 연결 안정성.
  • 새로운 WSL에 Docker 설치 명령.
  • Dev Containers 사전 빌드 지침 가이드.

원격 개발 릴리스 노트에서 새로운 확장 기능 및 버그 수정을 알아볼 수 있습니다: Remote Development release notes.

확장 프로그램 기여

GitHub Copilot

채팅 보기에서 작업 영역 만들기

이제 GitHub Copilot Chat 확장 프로그램의 안정 버전에서 /createWorkspace를 사용하여 자연어 설명으로 작업 영역을 만들 수 있습니다.

또한 다음과 같은 개선 사항을 적용했습니다.

  1. 제안된 작업 영역은 이제 채팅 응답에서 파일 트리로 렌더링됩니다.
  2. 파일을 클릭하면 편집기에서 읽기 전용 미리보기가 열립니다.
  3. Copilot의 초기 제안이 완벽하지 않았다면, 후속 질문을 하여 Copilot이 반복하고 개선하도록 도울 수 있습니다.

인라인 채팅으로 빈 편집기에서 코딩 시작

빈 텍스트 편집기를 열 때 ⌘I (Windows, Linux Ctrl+I)를 통해 인라인 채팅 세션을 시작하는 방법에 대한 힌트가 이제 제공됩니다. 화면 판독기 사용자는 이 힌트를 듣고 accessibility.verbosity.untitledHint 설정을 사용하여 비활성화할 수 있습니다.

빠른 채팅 개선

몇 달 전에 빠른 채팅을 도입했으며 VS Code에 맞춰진 경험을 제공하기 위해 빠르게 반복해 왔습니다.

이번 반복의 주요 내용

  • 더욱 컴팩트한 UX.
  • 이제 포커스가 손실되어도 빠른 채팅이 열린 상태로 유지됩니다.
  • 창 크기 조절을 위한 새시 및 "스크롤하여 확대" 동작.
  • 명령 센터에서 이제 빠른 채팅 열기.

The Quick Chat window with a question and answer displayed

전반적으로 UX는 명령 팔레트와 같은 다른 "빠른 열기" 경험과 일치하도록 더욱 컴팩트해졌습니다 (모든 곳에 패딩 감소, 사용자 및 Copilot 아이콘 작게, 제목 표시줄이 아닌 인라인 버튼).

기본적으로 질문하면 빠른 채팅이 해당 질문과 답변에 집중하도록 크기가 조정되어 화면 공간을 최소화합니다. 또한 Copilot에게 묻고 싶은 빠른 질문에 집중하는 데 도움이 된다고 생각합니다. 대화 기록은 여전히 사용할 수 있으며 위로 스크롤하여 시간을 거슬러 올라갈 수 있습니다.

이 동적 높이 때문에 더 많은 공간이 필요하거나 덜 필요할 때 창 크기를 조절할 수 있는 방법을 제공하고 싶었습니다. 창 크기를 조절하는 두 가지 옵션이 있습니다. 첫 번째는 "스크롤하여 확대"라고 부릅니다. 빠른 채팅 창이 작은 답변으로 인해 작지만 이전의 긴 답변을 보고 싶다면, 위로 스크롤하면 빠른 채팅이 최대 높이까지 확장됩니다.

마지막 질문과 답변만 표시하도록 창 높이를 재설정하려면 다음 중 하나를 수행합니다.

  • 빠른 채팅을 닫고 30초 동안 기다립니다.
  • 다른 질문을 하거나 /clear를 실행합니다 (/clear는 채팅 기록을 영구적으로 삭제합니다).
  • 하단 새시를 더블 클릭합니다.

새시를 언급하자면... 빠른 채팅 하단에 새시가 있어 빠른 채팅의 높이를 수동으로 조절하는 데 사용할 수 있습니다. 새시를 사용하면 기본 동적 동작을 옵트아웃하고 "이 높이를 여기에 고정하겠다"고 말하는 것입니다.

참고: 동적 동작으로 돌아가려면 새시를 더블 클릭하거나 채팅에 /clear를 입력하세요 (/clear는 채팅 기록을 삭제합니다).

마지막으로, 명령 센터에서 빠른 채팅 열기 옵션을 사용하여 빠른 채팅을 시작할 수 있습니다.

Open Quick Chat command in the Command Center

터미널 선택 사항 설명

Copilot은 이제 터미널 컨텍스트 메뉴에서 Copilot: 설명을 선택하여 현재 터미널 선택 사항을 설명할 수 있습니다 (플랫폼에 따라 마우스 오른쪽 클릭 또는 Shift + 마우스 오른쪽 클릭).

The terminal context menu's first entry is Copilot: Explain This

Copilot: 설명 명령을 실행하면 채팅 보기가 열리고 Copilot이 자세한 설명을 반환합니다.

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

설정에 대한 자연어 검색

설정 편집기에서 이제 GitHub Copilot Chat을 사용하여 자연어 검색을 할 수 있습니다.

현재 자연어 검색 결과는 키워드 일치 결과 아래에 표시되고 유사성 점수 내림차순으로 정렬되지만, 다음 달에는 정렬 순서를 수정하여 검색 결과가 목차 그룹별로 계속 배열되도록 할 계획입니다.

자연어 검색은 현재 Copilot 임베딩에 의존합니다. 따라서 GitHub Copilot Chat 확장이 활성화된 후 몇 초 동안 임베딩이 사용 가능해지기 전에 수행된 검색에 대한 자연어 검색 결과는 설정 편집기에 표시되지 않습니다.

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

테마: Light Pink (vscode.dev에서 미리 보기)

Python

새로운 Python 서식 지정 기사

Python 서식 지정에 대한 새로운 전용 주제가 있습니다. 여기서는 autopep8 또는 Black과 같은 기본 서식 지정 도구를 설정하고 다양한 설정을 통해 사용자 지정하는 방법을 배울 수 있습니다.

환경 변수를 사용한 터미널 활성화

Python 확장은 이제 명시적인 활성화 명령을 실행하지 않고 터미널에서 선택한 환경을 활성화하는 새로운 활성화 메커니즘을 갖습니다. 이번 달부터 실험적으로 이를 출시하기 시작하여 기본 환경으로 만들 것입니다. 새로운 접근 방식에서는 터미널을 활성화하기 위해 환경 변수를 사용하며, 이는 터미널 시작 시 암시적으로 수행되므로 특히 conda 환경의 경우 더 빠를 수 있습니다. 다음 사용자 설정을 추가하여 체험할 수 있습니다: "python.experiments.optInto": ["pythonTerminalEnvVarActivation"].

이 실험에 대한 의견이나 제안이 있으시면 vscode-python 이슈 #11039에서 자유롭게 공유해 주세요.

기존 .venv 환경 재구성 또는 사용

이미 .venv 폴더가 포함된 작업 영역 내에서 작업할 때 Python: 환경 만들기 명령에 기존 환경을 재구성하거나 사용할 옵션이 추가되었습니다. 환경을 재구성하기로 결정하면 현재 .venv가 삭제되어 새 .venv라는 이름의 환경을 다시 만들 수 있습니다. 그런 다음 선호하는 인터프리터를 선택하고 설치할 종속 파일 지정을 통해 이 새 환경을 사용자 지정할 수 있습니다. 환경을 삭제할 수 없는 경우(예: 활성 상태인 경우) 수동으로 환경을 삭제하라는 메시지가 표시됩니다.

대안으로, 기존 환경을 사용하기로 선택하면 해당 환경이 작업 영역에 선택됩니다.

미리보기 기능

작업 영역 검색 결과를 빠른 액세스 메뉴에 표시하는 실험을 하고 있습니다. 이를 시도하려면 검색: 빠른 텍스트 검색(실험)을 실행하세요. 이 명령은 빠른 열기가 검색 쿼리를 수락하도록 설정합니다. 일치하는 내용을 보려면 텍스트를 입력하여 다양한 작업 영역 파일의 일치 항목을 확인하세요.

포커스되지 않은 에디터 및 터미널 흐리게 하기

현재 포커스되지 않은 에디터 및 터미널을 흐리게 하는 새로운 실험적 기능이 있습니다. 이 기능의 목표는 일반적인 깜박이는 커서에 비해 텍스트가 어디로 갈지 훨씬 더 명확하게 만드는 것입니다.

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

위 이미지는 불투명도를 0.5로 설정하여 흐릿한 포커스되지 않은 기능이 활성화된 상태를 보여주어 terminalService.ts의 에디터가 포커스되어 있음을 더 명확하게 보여줍니다.

accessibility.dimUnfocused.enabled를 사용하여 활성화할 수 있으며, 흐리게 하는 양은 accessibility.dimUnfocused.opacity로 제어됩니다.

이 기능은 현재 에디터와 터미널만 포함하지만, 사용자가 흐리게 할 뷰를 직접 구성할 수 있도록 확장할 계획입니다 사용자 지정.

확장 프로그램 작성

배치 범위 서식 지정 지원

DocumentRangeFormattingEditProvider API는 이제 배치 서식 지정을 지원합니다. 즉, 확장은 편집기에 여러 범위를 한 번에 호출할 수 있도록 지원한다는 것을 선택적으로 알릴 수 있습니다. 이는 서식 지정 공급자에 대한 호출 수를 줄여 성능을 향상시키는 데 도움이 됩니다.

배치 서식 지정을 옵트인하려면 공급자는 새로운 선택적 함수를 구현해야 합니다: provideDocumentRangesFormattingEdits.

작업 영역 폴더에 범위가 지정된 EnvironmentVariableCollection

EnvironmentVariableCollection API는 이제 특정 작업 영역 폴더에 범위가 지정된 새 컬렉션을 생성할 수 있으며, 이는 "전역" 컬렉션에 추가하여 적용됩니다.

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 확장은 이 메커니즘을 사용하여 다중 루트 작업 영역에 속한 터미널에 따라 다른 가상 환경을 설정합니다.

EnvironmentVariableMutator가 적용되는 시기 구성

EnvironmentVariableCollection API는 이제 셸 초기화 스크립트 후에 실행되는 셸 통합 스크립트 내에서 변경 사항을 적용할 수 있습니다. 셸 통합이 활성화된 경우에만 작동하며, 셸 생성 시 및 셸 통합 내에서 변경 사항을 적용할 수 있습니다.

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

이 기능은 해당 변수가 셸 초기화 스크립트에 의해 변경될 수 있는 경우에 유용합니다.

제안된 API

모든 마일스톤에는 새로운 제안 API가 제공되며 확장 저자는 이를 시험해 볼 수 있습니다. 항상 그렇듯이 피드백을 원합니다. 제안 API를 시험해 보는 단계는 다음과 같습니다.

  1. 시험하고 싶은 제안을 찾아 package.json#enabledApiProposals에 해당 이름을 추가하세요.
  2. 최신 @vscode/dts를 사용하고 npx @vscode/dts dev를 실행하세요. 그러면 해당 d.ts 파일이 작업 영역으로 다운로드됩니다.
  3. 이제 제안에 대한 프로그래밍을 할 수 있습니다.

제안 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환성이 깨지는 변경 사항이 있을 수 있으며, 기존 확장을 깨뜨리는 일은 절대 없을 것입니다.

TestMessage의 contextValue 및 기여 지점

사용자가 메시지에 대해 작업을 수행할 때 표시되는 TestMessagecontextValue를 제공할 수 있습니다. 또한 testing/message/contexttesting/message/content라는 두 개의 새로운 메뉴 기여 지점이 제공됩니다. 첫 번째는 테스트 결과 트리 뷰의 메시지에 표시되고, 두 번째는 편집기의 메시지 위에 표시됩니다.

contextValue에 대한 자세한 내용은 이슈 #190277에서 확인할 수 있습니다.

터미널 컨텍스트 메뉴 기여

확장 프로그램이 터미널에 자체 컨텍스트 메뉴 작업을 통합할 수 있도록 두 개의 새로운 메뉴가 제안되었습니다.

  • terminal/context - 터미널 컨텍스트 메뉴
  • terminal/title/context - 터미널 탭 컨텍스트 메뉴

터미널 명령 실행 수신

오랫동안 요청되었던 확장 프로그램이 터미널 명령 실행 API를 수신할 수 있는 기능에 대한 초기 제안을 테스트할 수 있습니다. 이 API는 쉘 통합을 사용하여 구현되며, 활성화되고 작동하는 터미널에서만 트리거됩니다.

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

이 API의 모양은 최종이 아니지만 기본 아이디어는 동일하게 유지됩니다.

성공적인 git push 명령을 수신하고 확장 프로그램에서 새로고침을 트리거하는 예시 사용법입니다.

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

터미널 선택 접근

터미널 선택에 접근할 수 있는 간단한 API 제안

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

이 API에는 최종화되기 전에 해당 변경 이벤트가 포함될 가능성이 높으며 API 이름은 TextEditor.selection과 같이 Range 기반이 아니라 단순한 문자열임을 명확히 하기 위해 변경될 수 있습니다.

터미널 빠른 수정 진행 상황

터미널 빠른 수정 제안은 이제 터미널 명령이 아닌 일반 VS Code 명령을 트리거할 수 있습니다. 이 변경으로 인해 터미널 명령 인터페이스 이름도 변경해야 했습니다.

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

엔지니어링

Electron 25 업데이트

이번 마일스톤에서는 Electron 25 업데이트를 안정 사용자에 배포합니다. 이 업데이트에는 Chromium 114.0.5735.289 및 Node.js 18.15.0이 포함됩니다. Insiders 빌드에서 자체 호스팅하고 조기 피드백을 제공한 모든 분들께 감사드립니다.

Node.js 업데이트 주요 사항

데스크톱 애플리케이션에 포함된 Node.js 및 서버와 함께 제공되는 독립 실행형 실행 파일이 v16 -> v18로 업데이트되었습니다. 이는 메이저 버전 업그레이드이므로 몇 가지 동작 및 호환성 변경 사항이 있습니다.

  • 운영체제에서 제공하는 DNS 결과 순서가 더 이상 정렬되지 않습니다. 이 변경 사항을 아직 채택하지 않은 확장 프로그램의 중단을 방지하기 위해 로컬 및 서버 시나리오 모두에서 확장 프로그램 호스트에 --dns-result-order=ipv4first를 추가했습니다. 향후 확장 프로그램은 결과 순서 변경에 맞추기 위해 socket.connect API의 autoSelectFamily 옵션을 사용하는 것이 좋습니다.

  • Linux의 공식 Node.js 리포지토리에서 제공되는 사전 빌드된 바이너리는 이제 glibc 2.28 이상을 기반으로 하는 Linux 배포판과 호환됩니다. 이는 서버에서 Ubuntu 18, CentOS 7, RHEL 7 등의 지원을 중단함을 의미합니다. glibc 2.17 이상 호환성을 유지하기 위해 Linux 서버를 위한 사용자 정의 Node.js 빌드를 제공하고 있습니다. CentOS 7 이미지에서 최신 Node.js 버전을 빌드할 수 없게 되면 향후 업데이트에서 이 지원이 변경되므로, 영향을 받는 서버 사용자는 OS 버전을 업데이트하는 것이 좋습니다.

Chromium 업데이트 주요 사항

  • Mesa 버전 업데이트 후 Chromium 셰이더 컴파일이 실패하여 애플리케이션 UI에 아티팩트가 발생할 수 있습니다. 이 문제는 이슈 #190437에서 추적되며, Chromium 버그 보고서 링크도 포함되어 있습니다. --verbose로 실행하고 로그에서 ERROR:shared_context_state.cc(81)] Skia shader compilation error와 같은 줄을 찾아 이 문제를 식별할 수 있습니다. 이 문제의 영향을 받는 경우 현재 해결 방법은 GPU 캐시(~/.config/Code/GPUCache)를 삭제하는 것입니다.
  • Chromium이 WebGL에 SwiftShader 백엔드를 사용할 때 통합 터미널의 Windows 및 Linux 모두에서 성능이 저하되는 것 같습니다. 해결 방법으로 GL_RENDERER 문자열을 기반으로 영향을 받는 사용자를 감지하고 터미널에 DOM 백엔드로 전환합니다. 추가 자세한 내용은 Chromium 버그 보고서 링크도 포함된 이슈 #190195에서 확인할 수 있습니다.

감사합니다

마지막으로, VS Code 기여자에 대한 진심 어린 감사의 말씀을 전합니다.

이슈 추적

이슈 추적에 대한 기여

풀 리퀘스트

vscode 기여

vscode-css-languageservice에 대한 기여

vscode-hexeditor에 기여

vscode-js-debug 기여

vscode-pull-request-github 기여

vscode-vsce 기여

  • @bandantonio (Antonio)
    • feat: --help에 사용자 친화적인 정보 추가 PR #884
    • feat: 라이선스 파일 없이 패키징 및 게시 지원 추가 PR #887
    • 매니페스트의 불일치 가격 책정 값에 대한 오류 메시지 재구성 PR #890

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