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

2021년 8월 (버전 1.60)

업데이트 1.60.1: 이 업데이트는 다음 이슈들을 해결합니다.

업데이트 1.60.2: 이 업데이트는 다음 이슈들을 해결합니다.

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


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

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

다음 목요일, 9월 2일 태평양 표준시 오전 8시 (런던 오후 4시)에 VS Code 팀의 라이브스트림에 참여하여 이번 릴리스의 새로운 기능을 시연하고 실시간으로 질문해 주세요.

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

워크벤치

자동 언어 감지

지난 릴리스에서 제목 없는 파일에 대한 실험적 기능을 도입하여 내용에 따라 파일의 언어 모드를 자동으로 설정했습니다. 자동 언어 감지 기능은 머신 러닝을 사용하여 언어를 추측하며, 머신 러닝 모델은 사용자의 컴퓨터에서 완전히 로컬로 실행됩니다. 이 모델은 오픈 소스 ML 라이브러리인 Tensorflow.js와 GitHub 사용자 @yoeoGuesslang의 ML 모델로 구동됩니다.

이번 릴리스에서는 자동 언어 감지를 기본적으로 활성화하고, 파일 확장자가 없는 파일도 감지할 수 있도록 확장했습니다. 노트북에서는 언어 선택기를 사용하여 언어 감지를 요청하는 쉬운 방법을 제공합니다.

VS Code의 신규 사용자가 언어 모드를 설정하는 방법을 모르고, VS Code의 풍부한 기능 세트(언어 색상화 및 확장 프로그램 추천)를 사용하기 위해 이 설정이 필요하다는 것을 모른다는 것을 알게 되었기 때문에 이 기능을 추가했습니다. 신규 사용자가 VS Code에서 사용할 수 있는 언어 기능과 확장 프로그램을 빠르게 확인할 수 있도록 하면 편집기 학습에 도움이 됩니다.

또한, 제목 없는 텍스트 편집기를 임시 메모장으로 사용하는 파워 유저는 더 이상 명시적으로 언어 모드를 설정할 필요가 없으므로 워크플로를 간소화할 수 있기를 바랍니다.

자동 언어 감지로 인해 활성화되는 몇 가지 흥미로운 시나리오는 다음과 같습니다.

온라인에서 예제를 가져와 제목 없는 편집기에 붙여넣기

테마: Panda Theme

"코드 파이핑" 언어 감지 (확장 프로그램 없는 파일 감지 기능)

테마: Panda Theme

노트북 언어 선택기의 자동 감지 옵션

테마: Panda Theme

터미널 편집기 확인 대화 상자

실행 중인 하위 프로세스가 있는 터미널 편집기를 닫을 때 표시되는 대화 상자는 이제 터미널 편집기에 특화되었으며 더 이상 터미널을 "저장"하는 옵션을 제공하지 않습니다.

Terminal editor confirmation dialog

복원 실패 시 편집기를 닫는 대신 열어두기

이전에는 창을 다시 로드하거나 애플리케이션을 다시 시작한 후 편집기가 복원되지 않으면, 성공적으로 로드되는 편집기가 발견될 때까지 편집기가 자동으로 닫혔습니다. 이 동작은 편집기가 닫힘으로써 신중하게 만든 편집기 레이아웃이 사라지는 좌절스러운 결과를 초래했습니다.

이번 릴리스에서는 한 번 성공적으로 열린 편집기는 복원에 실패하더라도 닫히지 않습니다. 편집기는 문제를 나타내고 작업을 다시 시도할 옵션을 제공합니다.

Keep editors open and offer to Try Again

설정 편집기에서 코드 블록 구문 강조

설정 설명에 있는 구분된 코드 블록에 이제 구문 강조 기능이 적용됩니다.

Syntax highlighting of TypeScript code in the Settings editor

설정 편집기를 옆으로 열기

openToSide 인수를 사용하여 키 바인딩을 구성하면 설정 편집기를 옆쪽 그룹으로 열 수 있습니다.

{
  "key": "cmd+,",
  "command": "workbench.action.openSettings",
  "args": {
    "openToSide": true
  }
}

이는 workbench.action.openSettingsJson 명령에도 적용됩니다.

편집기

고성능 괄호 쌍 색상화

편집기에서 이제 네이티브 괄호 쌍 색상화를 지원합니다.

Side by side comparison with bracket pair colorization on and off

괄호 쌍 색상화는 "editor.bracketPairColorization.enabled": true로 설정하여 활성화할 수 있습니다. 모든 색상은 테마별로 설정 가능하며 최대 6가지 색상을 구성할 수 있습니다.

이 기능은 유명한 Bracket Pair Colorizer 확장 프로그램의 성능 문제를 해결하기 위해 구현되었습니다. CoenraadS가 개발했습니다.

이제 거대한 문서의 변경 사항도 즉시 반영됩니다.

자동 완성에서 인라인 제안

이제 자동 완성 위젯이 표시될 때 인라인 제안으로 제안 미리 보기를 확장할 수 있습니다. 자동 완성 위젯에서 선택된 제안이 인라인 완성 제공자에 의해 확장될 수 있다면, 확장은 기울임꼴로 표시됩니다. Tab 키를 한 번 누르면 여전히 자동 완성 제안만 수락됩니다. Tab 키를 두 번 누르면 인라인 제안이 수락됩니다.

이 기능은 제안 미리 보기가 활성화되어 있어야 합니다("editor.suggest.preview": true).

업데이트된 미리 보기 보기

다른 편집기 보기와 일치하도록 미리 보기 보기의 시각적 디자인을 새롭게 했습니다.

Peek view for informational items

Peek view for warning items

Peek view for error items

Peek view for References view

터미널

상자 그리기 및 블록 요소 문자의 사용자 지정 렌더링

GPU 가속이 켜져 있을 때(terminal.integrated.gpuAcceleration) 상자 그리기 및 블록 요소 문자는 이제 폰트를 사용하는 대신 픽셀 단위로 완벽하게 사용자 지정된 글리프를 사용합니다. 예를 들어, 터미널에서 줄 높이나 문자 간격을 설정하더라도 상자는 간격 없이 그려집니다.

Terminal glyph rendering before with gaps Terminal glyph rendering after without gaps

다음은 터미널 앱 Zenith의 예시로, 섹션 주위의 상자 그리기 문자 및 차트용 블록 요소를 보여줍니다.

Terminal rendering box characters and block elements

"terminal.integrated.customGlyphs": false로 설정하여 이 기능을 비활성화할 수 있습니다.

특정 폰트의 밑줄 렌더링 개선

터미널에서 밑줄이 렌더링되는 방식에는 몇 가지 역사적인 문제가 있었으며, 대부분 WebGL 렌더러(기본값)로 전환하여 해결되었습니다. 단, Linux에서 폰트의 밑줄 문자가 예기치 않게 셀 경계 아래로 그려지는 예외가 있었습니다.

아랫줄의 밑줄이 셀 아래에 렌더링되는 것을 확인하세요.

The underscore was previously rendered 1 pixel below the cell's bounds

대부분의 경우 문제가 없지만, 캔버스 경계 밖으로 그려지기 때문에 맨 아래 줄에서는 작동하지 않습니다.

이제 이러한 폰트를 감지하고 밑줄 텍스처를 셀 경계 안으로 들어올 때까지 위로 이동시켜 이 문제를 해결합니다. 이 솔루션은 이전에는 행이 겹치지 않도록 행을 잘라내기 때문에 어떤 행에서도 밑줄이 표시되지 않던 캔버스 렌더러에도 적용됩니다.

The underscore is now at the bottom of the cell's bounds

창을 다시 로드한 후 더 빠른 재연결

이전에는 창을 다시 로드할 때 터미널 버퍼의 상태를 구문 분석하는 데 최대 300ms가 걸릴 수 있었으며, 손상 가능성도 있었습니다. 여러 개의 바쁜 터미널의 경우 이 시간이 빠르게 누적될 수 있습니다! 이를 해결하기 위해 버퍼 복원 방식이 pty 호스트에 많은 수의 최근 원시 터미널 이벤트를 기록하는 방식에서 pty 호스트에 헤드리스 터미널 프론트엔드를 유지하고 모든 데이터를 해당 프론트엔드로 쓰는 방식으로 변경되었습니다.

이 접근 방식은 몇 가지 이점을 제공합니다.

  • 복원할 스크롤백 양을 세밀하게 조정할 수 있습니다. 기본값은 이제 100이며, 속도와 데이터 양 간에 좋은 균형을 이룹니다. terminal.integrated.persistentSessionScrollback 설정을 사용하여 스크롤백 양을 변경할 수 있습니다.
  • xterm.js의 빠른 파서 덕분에 CPU 사용량에 미치는 영향이 최소화되고 pty 호스트의 전체 메모리 사용량이 줄어들어야 합니다.
  • 이전에 놓쳐 버퍼 손상을 유발할 수 있었던 터미널 모드가 이제 명시적으로 복원됩니다.
  • 터미널 버퍼가 항상 크기와 동기화되어 있으므로 비용이 많이 드는 크기 조정 이벤트를 다시 실행할 필요가 없습니다.
  • 복원이 상대적으로 빠르기 때문에 모든 것이 단일 프레임에서 처리됩니다. 이는 부분적으로 복원된 터미널을 렌더링하는 데 귀중한 CPU 시간이 낭비되는 것을 방지하고 속도를 더욱 늦추는 것을 의미합니다.

이 새로운 구현이 제공하는 속도 향상의 정도는 터미널 수, 하드웨어, 터미널 버퍼 크기, 터미널에서 무슨 일이 일어나고 있었는지와 같은 여러 요인에 따라 달라집니다. 전체 터미널 버퍼를 복원하는 대략적인 추정치는 약 5-10배의 속도 향상을 제공해야 합니다.

또한 npm에 새로운 xterm-headless 패키지를 게시했으므로, 이 작업을 자체 프로젝트에도 사용할 수 있습니다.

디버깅

WATCH 보기에서 값 설정

이제 컨텍스트 메뉴의 **값 설정** 작업을 사용하여 WATCH 보기에서 감시 표현식의 값을 설정할 수 있습니다.

Shows WATCH view with the Set Value action selected in the context menu

디버그 확장 프로그램은 **값 설정**이 가능하도록 하려면 이 기능을 옵트인해야 합니다. 현재 JS-debug, C#, C++ 확장 프로그램이 이를 지원하지만, 다른 디버그 확장 프로그램도 곧 지원할 것으로 예상됩니다.

기타 UI 개선 사항

  • VS Code는 이제 VARIABLES 보기, WATCH 보기 및 Debug hover에서도 값에 대한 링크를 감지합니다. 변수의 값이 링크인 경우, 이를 클릭하여 해당 링크를 더 쉽게 따라갈 수 있습니다.

  • 이미 실행 중인 디버그 세션의 다른 인스턴스를 시작할 때, 실수로 두 개의 세션을 시작하는 것을 방지하기 위한 모달 확인 대화 상자가 이제 표시됩니다.

  • 편집기의 중단점 여백에서 비활성화된 중단점을 클릭하면 중단점이 제거되는 대신 활성화됩니다.

  • 디버그 세션이 활성 상태일 때, 편집기의 중단점 여백 컨텍스트 메뉴에서 **라인까지 실행** 작업이 이제 가능합니다.

새로운 설정

  • 디버그 세션 중에 실수로 창을 닫는 것을 방지하려면 새 설정 debug.confirmOnExit을 활성화할 수 있습니다. 이를 always로 설정하면 창을 닫을 때 디버그 세션을 종료할 것인지 확인하라는 메시지가 표시됩니다.

    Confirm quit while debugging

  • 새로운 설정 debug.console.acceptSuggestionOnEnter는 디버그 콘솔에서 Enter 키를 눌렀을 때 제안을 수락할지 여부를 제어합니다. Enter 키는 디버그 콘솔에 입력된 내용을 평가하는 데도 사용되므로, 이 옵션은 사용자가 Enter 키를 눌렀을 때 발생하는 상황을 더 잘 제어할 수 있도록 합니다.

JavaScript 디버깅

레거시 Node 디버거 제거

VS Code에는 오래 전부터 내장 Node.js 디버거가 포함되어 있었고 별도의 Chrome 디버거를 게시했습니다. 작년에 Node.js 및 Chrome를 위한 새로운 디버거를 도입했으며, VS Code 1.47(2020년 7월)부터는 '옵트아웃' 옵션과 함께 기본값으로 설정되었습니다.

이번 릴리스에서는 **이전** 디버거가 제품에서 제거되었고 마켓플레이스에 사용 중단으로 표시되었습니다. 새 JavaScript 디버거를 옵트아웃하지 않은 대부분의 VS Code 사용자에게는 아무런 변화가 없을 것입니다.

이전 디버거가 필요한 경우(예: Node.js 6 프로그램을 디버깅하려는 경우), [Deprecated] Node Debug 또는 [Deprecated] Debugger for Chrome 확장 프로그램을 설치하고 각각 legacy-node 또는 legacy-chrome 런치 타입을 사용하면 됩니다.

비동기 함수 및 Node.js 내부의 단계별 실행 개선

디버거의 skipFiles를 설정하여 Node.js 내부를 포함하여, 비동기 함수 주변을 단계별로 실행할 때 자주 발생하는 특정 코드에 들어가는 것을 방지할 수 있습니다.

하지만 Node.js는 "블랙박스" 스크립트 처리 시 항상 올바른 동작을 보이지 않으므로, 이번 반복에서는 디버거에 "합성 블랙박스" 기능을 도입했습니다. 이를 통해 Node.js 프로그램을 다룰 때, 특히 비동기 함수로 단계별 실행할 때 신뢰성이 크게 향상될 것입니다.

다음 릴리스에서는 Node.js 내부를 기본적으로 건너뛰도록 할 예정입니다.

설치 프로그램

지원되는 파일 형식에 대해 VS Code를 기본적으로 등록

Windows 11은 **열기**와 함께 메뉴 상단에 **다른 이름으로 열기**를 배치하는 새로운 파일 탐색기 컨텍스트 메뉴를 도입합니다. 이 업데이트를 통해 사용 가능한 모든 편집기를 더 쉽게 찾고 기본값을 변경할 수 있습니다.

새로운 모범 사례에 따라, Windows 설치 시 VS Code의 **VS Code를 연결된 파일 형식의 편집기로 등록** 체크박스가 기본적으로 선택됩니다. 또한 연결된 파일 형식 목록을 검토하고 자주 열리는 파일 형식을 더 많이 포함하도록 확장했습니다.

Windows 11의 Microsoft Store

곧 출시될 Windows 11에서는 새로운 Microsoft Store가 더 많은 일반 애플리케이션 형식 및 설치 프로그램을 지원할 수 있습니다. Insiders 프로그램을 통해 Windows 11을 테스트 중이라면, 스토어에서 VS Code를 검색하여 최신 릴리스를 설치할 수 있습니다. 설치 후에는 웹사이트에서 제공하는 것과 동일한 VS Code를 사용하게 되며, 업데이트는 오늘날과 같이 인앱으로 처리됩니다.

노트북

노트북에서 이제 Markdown 셀 간의 링크를 지원합니다.

Markdown 셀의 헤더에 대한 링크는 다음과 같이 생성할 수 있습니다.

[Link text](#_header-slug)

header-slug는 헤더의 소문자 텍스트이며, 모든 공백이나 특수 문자는 -로 대체됩니다. 위의 예시에서 링크는 # Header Slug 헤더로 이동합니다.

큰 출력 처리 시 성능 개선

노트북에서 큰 출력을 처리하는 방식을 최적화하여 성능을 크게 향상시켰습니다.

내부적으로 VS Code는 노트북 출력을 Uint8Arrays를 사용하여 이진 데이터로 저장합니다. 이전에는 확장 호스트 프로세스와 렌더러 프로세스 간에 출력 데이터를 전송할 때, 데이터가 먼저 숫자 배열로 변환된 다음 JSON으로 직렬화되었습니다.

이것이 왜 성능에 나쁜지 이해하기 위해, Hello Code!라는 텍스트를 출력하는 노트북을 생각해 봅시다. 이 텍스트는 내부적으로 Uint8Array로 저장됩니다.

new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);

이 데이터는 11바이트입니다. 이전 구현에서는 이진 데이터를 JSON 문자열로 변환했습니다.

'[72,101,108,108,111,32,67,111,100,101,33]';

이 문자열은 41바이트 길이로, 원본 데이터 크기의 3.5배 이상입니다! 이는 전송해야 할 추가 바이트가 많으며, 수신자는 JSON 문자열로 다시 Uint8Array로 변환하기 위해 해당 문자열을 파싱해야 합니다. 이 파싱은 수십 MB 크기의 노트북 출력에서 심각한 병목 현상이 될 수 있습니다.

새로운 구현에서는 노트북 출력을 전송하는 동안 이진 데이터로 유지됩니다. 이 구현 방법에 대한 자세한 내용은 풀 요청에서 확인할 수 있습니다.

이 수정으로 인해 큰 출력이 저장된 노트북의 로딩이 크게 개선되었으며, 노트북 실행 중에 큰 출력이 생성될 때의 성능도 향상되었습니다.

onNotebook 활성화 이벤트 개선

VS Code는 노트북이 워크스페이스에서 열릴 때 onNotebook:{type}onNotebook:* 이벤트를 발생시켜 노트북 확장 프로그램이 이벤트를 수신할 때 활성화되도록 합니다. 이전에는 VS Code가 이 두 이벤트를 수신하는 모든 확장 프로그램이 완료될 때까지 기다렸다가 파일을 열었지만, 이제는 특정 노트북의 시리얼라이저가 등록될 때까지 기다립니다. 예를 들어, 사용자가 새 워크스페이스에서 ipynb 파일을 열면, 내장 ipynb 시리얼라이저 확장 프로그램이 활성화되고 파일이 즉시 열립니다. 동시에 VS Code는 Jupyter, .NET Interactive 또는 Julia 확장 프로그램과 같은 다른 모든 확장 프로그램에 활성화 이벤트를 발생시킵니다. 다른 확장 프로그램의 활성화는 파일 작업을 늦추지 않아 빠른 노트북 열기를 보장합니다.

노트북 레이아웃 사용자 지정

이제 편집기 도구 모음에서 직접 노트북 레이아웃 설정을 사용자 지정할 수 있습니다.

Notebook layout customization actions available in the editor toolbar

언어 기능

TypeScript 4.4

VS Code는 이제 TypeScript 4.4을 포함합니다. 이 업데이트는 정적 블록새로운 엄격성 옵션을 포함하여 여러 새로운 언어 기능과 개선 사항에 대한 지원을 제공합니다. 또한 새로운 도구 개선 사항이 추가되고 중요한 버그가 수정되었습니다.

TypeScript 블로그에서 TypeScript 4.4에 대한 모든 내용을 확인할 수 있습니다.

JavaScript 및 TypeScript용 인라인 힌트

TypeScript 4.4의 가장 중요한 새 도구 기능은 인라인 힌트 지원입니다. 인라인 힌트는 소스 코드에 추가적인 인라인 정보를 추가하여 코드가 무엇을 하는지 이해하는 데 도움이 됩니다.

예를 들어, 매개변수 이름 인라인 힌트는 함수 호출에서 매개변수 이름을 표시합니다.

Parameter name inlay hints

이를 통해 각 인수의 의미를 한눈에 이해하는 데 도움이 되며, 특히 부울 플래그를 사용하거나 매개변수를 혼동하기 쉬운 함수에 유용합니다.

매개변수 이름 힌트를 활성화하려면 javascript.inlayHints.parameterNames.enabled 또는 typescript.inlayHints.parameterNames.enabled 설정을 구성하세요. 세 가지 가능한 값이 있습니다.

  • none - 매개변수 인라인 힌트 비활성화.
  • literals - 리터럴(문자열, 숫자, 불리언)에 대해서만 인라인 힌트 표시.
  • all - 모든 인수에 대해 인라인 힌트 표시.

또한, VS Code는 JavaScript 및 TypeScript 코드에 암시적 유형 정보를 표시하는 인라인 힌트도 제공합니다.

변수 타입 인라인 힌트는 명시적인 타입 주석이 없는 변수의 타입을 표시합니다.

설정 - javascript.inlayHints.variableTypes.enabledtypescript.inlayHints.variableTypes.enabled

Variable type inlay hints

속성 타입 인라인 힌트는 명시적인 타입 주석이 없는 클래스 속성의 타입을 표시합니다.

설정 - javascript.inlayHints.propertyDeclarationTypes.enabledtypescript.inlayHints.propertyDeclarationTypes.enabled

Property type inlay hints

매개변수 타입 힌트는 암시적으로 타입이 지정된 매개변수의 타입을 표시합니다.

설정 - javascript.inlayHints.parameterTypes.enabledtypescript.inlayHints.parameterTypes.enabled

Parameter type inlay hints

반환 타입 인라인 힌트는 명시적인 타입 주석이 없는 함수의 반환 타입을 표시합니다.

설정 - javascript.inlayHints.functionLikeReturnTypes.enabledtypescript.inlayHints.functionLikeReturnTypes.enabled

Return type inlay hints

앞으로도 인라인 힌트를 계속 개선할 예정이므로, 새로운 기능에 대한 피드백이 있다면 언제든지 공유해 주세요!

JavaScript 파일의 철자 제안

VS Code는 이제 JavaScript 파일에서 간단한 철자 오류를 잡아내는 데 도움을 줍니다.

Spelling suggestions in a plain JS files

철자 제안은 IntelliSense 엔진이 이해하지 못하는 코드 패턴이 아니라 실제 오류라고 확신할 수 있는 경우에만 표시됩니다. 이 기능에 대한 자세한 내용은 기능을 추가한 PR에서 확인할 수 있습니다.

다음과 같이 이러한 제안을 비활성화할 수도 있습니다.

"javascript.suggestionActions.enabled": false

더 포괄적인 검사를 위해서는 JavaScript 코드에서 전체 의미론적 검사를 활성화해 보세요. 이는 더 많은 오류를 잡아내는 데 도움이 될 뿐만 아니라 여러 유용한 빠른 수정 기능을 활성화합니다.

typescript.tsserver.useSyntaxServer

새로운 typescript.tsserver.useSyntaxServer 설정은 TypeScript가 코드 폴딩 계산과 같은 구문 관련 작업을 신속하게 처리하기 위해 전용 서버를 실행할지 여부를 제어할 수 있게 합니다. 이 설정은 이제 사용 중단된 typescript.tsserver.useSeparateSyntaxServer 설정을 대체합니다.

가능한 값은 다음과 같습니다.

  • auto - 전체 서버와 구문 작업 전용의 경량 서버를 모두 시작합니다. 구문 서버는 코드 폴딩과 같은 구문 작업을 빠르게 처리하고 프로젝트 로딩 중에 IntelliSense를 제공하는 데 사용됩니다. (기본값)
  • always - 모든 IntelliSense 작업을 처리하기 위해 경량 구문 서버를 사용합니다. 이 구문 서버는 열려 있는 파일에 대해서만 IntelliSense를 제공할 수 있습니다.
  • never - 전용 구문 서버를 사용하지 않습니다. 모든 IntelliSense 작업을 처리하기 위해 단일 서버를 사용합니다.

미리 보기 기능

잠긴 편집기 그룹

편집기 영역에 터미널이 도입되면서, 터미널 편집기가 너무 쉽게 또는 실수로 파일 편집기로 대체되어 좌절감을 느낀다는 사용자들의 보고를 받았습니다. 기본적으로 파일은 항상 활성 편집기 그룹에 열리므로, 터미널이 활성 상태일 때도 파일이 열려 터미널을 숨기게 됩니다.

**잠긴 편집기 그룹**은 터미널뿐만 아니라 모든 편집기에 대해 이 문제를 해결하는 새로운 방법을 제공합니다. 여러 개의 편집기 그룹이 열려 있는 경우, 새로운 명령 중 하나를 사용하거나 **"..."** 오버플로 메뉴에서 그룹을 잠글 수 있습니다.

Lock Group action on the editor context menu

잠긴 그룹은 잠기지 않은 그룹과 다르게 작동합니다.

  • 새로운 편집기는 사용자가 명시적으로 해당 그룹으로 이동하지 않는 한(예: 끌어서 놓기) 잠긴 그룹에 열리지 않습니다.
  • 편집기가 잠긴 그룹을 건너뛰고 열리는 경우, 가장 최근에 사용된 잠기지 않은 그룹에 열리거나 잠긴 그룹 옆에 새 그룹을 생성합니다.
  • 편집기 그룹의 잠금 상태는 유지되며 다시 시작해도 복원됩니다.
  • 빈 그룹도 잠글 수 있어 더 안정적인 편집기 레이아웃을 만들 수 있습니다.
  • 잠긴 그룹은 작업 도구 모음(오른쪽 상단)의 잠금 아이콘으로 표시됩니다.

Locked editor group layout with lock icon

다음 데모에서 잠긴 편집기 그룹이 어떻게 작동하는지 확인하세요. Markdown 미리 보기가 활성 상태이지만, 새 파일은 왼쪽 편집기 그룹에 열립니다.

이 기능을 위해 추가된 명령은 다음과 같습니다.

  • workbench.action.experimentalLockEditorGroup
  • workbench.action.experimentalUnlockEditorGroup
  • workbench.action.experimentalToggleEditorGroupLock

새로운 컨텍스트 키 activeEditorGroupLocked를 사용하여 그룹의 잠금 상태에 따라 명령을 조건부로 바인딩할 수 있습니다.

**참고:** 관련 설정 및 명령은 잠긴 편집기 그룹의 디자인이 최종 확정될 때까지 실험적입니다. 이 새로운 기능에 대한 피드백을 원하므로, 문제가 있으면 언제든지 신고해 주세요.

편집기 그룹 자동 잠금

새로운 잠긴 편집기 그룹 개념을 기반으로, 새로운 workbench.editor.experimentalAutoLockGroups 설정을 사용하면 열릴 때 그룹을 자동으로 잠그는 편집기를 선택할 수 있습니다. 이는 편집기가 비어 있거나 새 그룹에 처음 열리는 경우에만 적용됩니다.

터미널은 기본적으로 새 그룹을 자동으로 잠그도록 구성되어 있습니다. 아래 짧은 동영상에서 터미널이 활성 상태임에도 불구하고 터미널에서 선택된 파일은 왼쪽 편집기 그룹에 열립니다.

Markdown 미리 보기가 그룹을 자동으로 잠그도록 하려면 experimentalAutoLockGroups 설정에 mainThreadWebview-markdown.preview: true를 추가할 수 있습니다.

다음 마일스톤에서는 편집기 식별자를 알 필요 없이 편집기를 선택할 수 있도록 설정 UX를 개선할 예정입니다. 관련 설정 및 명령은 잠긴 편집기 그룹의 디자인이 최종 확정될 때까지 실험적입니다. 다시 한번 피드백을 원합니다.

"파일 이름으로 검색" 빠른 열기에서 따옴표 지원

이번 반복에서는 검색 문자열을 따옴표로 묶어 "파일 이름으로 검색" 빠른 열기(⌘P (Windows, Linux Ctrl+P))에서 퍼지 검색 결과를 제외할 수 있는 기능을 추가했습니다.

이것이 유용하게 사용되는 시나리오

쿼리가 몇 글자 안 되는 경우

결과의 "잡음"을 줄이고 싶은 경우

이 인용 경험은 직관적이며 대부분의 검색 엔진이 유사한 메커니즘을 사용하므로 마음에 듭니다. 하지만 피드백을 받고 싶습니다. 이슈 #131431에서 논의된 다른 접근 방식도 고려하고 있습니다.

확장 프로그램 기여

Jupyter

줄별 실행

VS Code는 이제 Jupyter 노트북에서 **줄별 실행** 기능을 지원합니다. 이것은 셀의 코드를 한 줄씩 실행할 수 있는 간단한 디버그 모드입니다. 사용하려면 ipykernel v6+가 선택한 커널로 설치되어 있는지 확인한 후 **줄별 실행** 버튼을 선택하세요.

디버깅

또한 VS Code의 전체 디버그 기능을 사용하여 Jupyter 노트북을 디버깅하는 실험적 지원도 있습니다. 사용하려면 ipykernel v6+가 선택한 커널로 설치되어 있는지 확인하고, "jupyter.experimental.debugging": true를 설정한 후 중단점을 설정하고 **셀 디버그** 명령을 선택하세요.

Jupyter 키맵

Jupyter 클래식 키 바인딩을 별도의 Jupyter Keymap 확장 프로그램으로 추출했습니다. 다른 노트북 키 바인딩 세트를 선호하는 경우 이 확장 프로그램을 비활성화할 수 있습니다.

Python

개편된 테스트 인터페이스

새로운 테스트 API 덕분에 Python 확장 프로그램은 테스트 기능을 개편했습니다. 이제 테스트 검색, 탐색 및 상태 렌더링에 대한 더 안정적인 경험과 테스트 검색, 테스트 선택 실행, 마지막으로 실행한 테스트 다시 실행 등 새로운 기능을 즐길 수 있습니다!

Running tests with the new Python Test Explorer

편집기에서 터미널을 통해 Python 파일 실행 및 디버그

이제 Python 확장 프로그램을 사용하여 편집기에서 직접 터미널을 통해 Python 파일을 **실행 및 디버그**할 수 있습니다.

GitHub Pull Requests 및 Issues

GitHub Pull Requests and Issues 확장 프로그램에서 모든 주석을 확장하고 축소할 수 있는 매우 요청이 많았던 기능이 이제 가능합니다. **GitHub Pull Requests: Expand All Comments** 및 **GitHub Pull Requests: Collapse All Comments** 명령을 통해 모든 주석을 확장하고 축소할 수 있습니다. githubPullRequests.commentExpandState 설정으로 확장/축소 상태를 제어할 수도 있습니다. 마지막으로, 주석 UI 내에서도 모든 주석을 축소할 수 있습니다.

Collapse all pull request comments button

새로운 기능 및 업데이트에 대해 자세히 알아보려면 확장 프로그램 0.30.0 릴리스의 전체 변경 로그를 참조하세요.

확장 프로그램 작성

웹 확장

VS Code가 브라우저에서 실행될 때, 확장 프로그램은 브라우저에서도 실행되는 확장 프로그램 호스트에 로드됩니다. "웹 확장 프로그램 호스트"는 브라우저에 의해 제한되며 확장 프로그램은 로컬 파일 시스템이나 플랫폼 기능에 액세스할 수 없습니다. 확장 프로그램 작성자가 브라우저에서 실행되는 VS Code를 지원하도록 확장 프로그램을 업데이트하는 데 도움이 되도록, 이제 웹 확장 프로그램 작성자 가이드가 있습니다. 여기에서 웹에서 가장 잘 작동하는 확장 프로그램 유형, VS Code API에 액세스하는 방법, 가상 파일 시스템 작업 방법을 배울 수 있습니다.

웹 확장 프로그램 가이드와 함께, yo code 확장 프로그램 생성기에는 이제 **웹 확장 프로그램**을 스캐폴딩하는 옵션이 있으며, 명령줄에서 웹 확장 프로그램을 테스트하기 위한 @vscode/test-web 모듈에 대한 지원도 포함되어 있습니다.

웹에서의 Visual Studio Code를 본 적이 없다면, GitHub 저장소의 **<> Code** 탭에서 . (마침표 키)를 누르면 VS Code의 웹 기반 버전이 실행되어 소스 코드를 탐색하고 편집할 수 있습니다.

명령의 짧은 제목

commands 기여 포인트는 확장 프로그램이 제목, 카테고리 또는 아이콘과 같은 명령에 대한 UI 속성을 정의할 수 있도록 합니다. 반면에 메뉴는 명령을 표시하는 "위치"이며 메뉴는 명령의 UI 속성 중 일부 또는 전부를 표시할 수 있습니다. 예를 들어, 일부 메뉴는 아이콘만 렌더링하고 다른 메뉴는 제목 또는 카테고리 및 제목을 렌더링합니다. 확장 프로그램 작성자로서 전역 메뉴와 로컬 메뉴 모두에 적합한 명령 제목을 생각해 내는 것은 어렵습니다. 예를 들어, 명령 팔레트는 컨텍스트 메뉴보다 더 많은 단어를 표시할 수 있습니다.

다른 제목을 허용하기 위해 새로운 shortTitle 속성이 있습니다. 이를 통해 명령은 UI에 따라 잘 작동하는 더 짧은 제목을 제공할 수 있습니다. 예를 들어, 명령 팔레트에서는 **Notebook: Clear All Cell Output**이고 노트북 도구 모음에서는 더 짧은 **Clear All**입니다.

애플리케이션 호스트가 환경 네임스페이스에 추가됨

.env 네임스페이스에 이제 애플리케이션 호스트 appHost 속성이 포함됩니다. appHost를 통해 확장 프로그램 개발자는 VS Code가 호스팅되는 환경을 확인할 수 있습니다. 예시로는 데스크톱, GitHub Codespaces, github.dev, vscode.dev 등이 있습니다.

RendererContext.workspace.isTrusted for notebook renderers

노트북 렌더러에 전달되는 컨텍스트 객체의 새로운 workspace.isTrusted 속성을 사용하면 확장 프로그램 작성자가 현재 작업 공간이 신뢰할 수 있는지 여부를 확인할 수 있습니다.

import type { ActivationFunction } from 'vscode-notebook-renderer';

export const activate: ActivationFunction<void> = (ctx) => {
  return {
    renderOutputItem: (outputInfo, element) => {
      if (ctx.workspace.isTrusted) {
        // Render normally. Still take precautions to avoid script injection and
        // only enable as much functionality as your renderer needs.
      } else {
        // Only render safe content. Always make sure it has been properly sanitized.
      }
    }
  }
};

플랫폼별 확장 프로그램

플랫폼별 확장 기능(platform-specific extensions)에 대한 진행 상황을 알려드립니다. 이 기능은 확장 기능 작성자가 Windows, macOS, Linux 등 다양한 플랫폼에 대한 별도의 확장 기능 버전을 만들 수 있도록 지원합니다. Marketplace 팀과 이 기능을 함께 작업했으며 최종 해결책을 확정했습니다. 이번 마일스톤에서는 구현을 시작했으며 곧 확장 기능 작성자에게 제공될 예정입니다. 업데이트를 확인하고 피드백을 제공하려면 이슈 #23251을 팔로우해주세요.

업데이트된 코드 아이콘

다음과 같은 새 아이콘이 codicon 라이브러리에 추가되었습니다.

An example of updated codicons

  • folder-library
  • run-errors

Walkthrough 기여 업데이트

테마 가능한 SVG를 Walkthrough 단계 미디어로 사용

이제 Walkthrough 단계에서는 media 객체에 svg 속성을 지정할 수 있습니다. 더 나은 확대/축소 지원 외에도 SVG는 테마 토큰에 액세스할 수 있어 워크벤치의 나머지 부분과 시각적으로 일치하는 미디어를 만들 수 있습니다. 자세한 내용은 웹뷰 콘텐츠 테마 지정 가이드를 참조하세요.

Walkthrough의 관심 파일 선언

이제 Walkthrough는 주어진 walkthrough가 적용되는 파일 유형 목록을 제공하는 선택적 featuredFor 매개변수를 지원합니다. 작업 영역 폴더에서 이러한 파일이 발견되면 walkthrough는 더 높은 시각적 우선순위로 렌더링됩니다.

작업 기본 그룹 API

TaskGroup에 대한 isDefault 속성이 확정되었습니다. 이제 확장 기능은 작업을 가져온 다음 작업의 group에 대한 isDefault 속성을 읽어 작업이 해당 그룹의 기본값인지 확인할 수 있습니다.

디버거 확장 프로그램 작성

"DebugSessionOptions"에 새로운 "managedByParent" 속성

새로운 플래그 managedByParentDebugSessionOptions 유형에 추가되었습니다. startDebugging API에 전달될 때 새롭게 생성된 세션 또는 해당 부모 세션으로 disconnectrestart와 같은 수명 주기 요청이 전송되는지 여부를 제어합니다.

디버그 어댑터 프로토콜의 "showUser" 속성

launch 요청이 실패하면 VS Code는 이제 디버그 어댑터의 응답과 함께 전송된 showUser 속성을 존중합니다. showUser 속성이 제공되고 false인 경우 VS Code는 오류와 함께 모달 대화 상자를 표시하지 **않습니다**. showUser 속성이 없거나 true인 경우 VS Code는 이전과 같이 작동하며 오류 대화 상자를 표시합니다.

다른 디버그 어댑터 프로토콜(DAP) 요청에는 변경 사항이 없습니다. showUsertrue인 경우 오류는 알림을 통해 표시됩니다. 그렇지 않으면 사용자에게 아무것도 표시되지 않습니다.

VS Code는 더 이상 "noDebug" 디버그 세션에 대한 중단점을 등록하지 않습니다.

DAP의 launch 요청에서 noDebug 속성이 true로 설정되면 VS Code는 더 이상 중단점 등록 DAP 요청(setBreakpoints, setExceptionBreakpoints, setDataBreakpoints, setFunctionBreakpoints, setInstructionBreakpoints)을 호출하지 않습니다.

VS Code가 DAP "setExpression" 요청을 지원합니다.

디버그 어댑터가 setExpression 요청을 구현하는 경우(supportsSetExpression 기능이 true인 경우), VS Code는 두 가지 상황에서 setExpression을 사용합니다.

  • VARIABLES 및 WATCH 보기에서 변수 값을 변경할 때, 디버그 어댑터가 setVariable 요청을 지원하지 않고(supportsVariable 기능이 없거나 false) 변수에 evaluateName 속성이 있고 편집 가능한 경우(VariablePresentationHintreadOnly 속성이 true가 아닌 경우).
  • WATCH 보기에서 할당 가능한 표현식의 값을 변경할 때, watch 표현식이 편집 가능한 경우(VariablePresentationHintreadOnly 속성이 true가 아닌 경우).

DAP 오류 메시지에서 'launch.json 열기' 버튼 숨기기

디버그 어댑터 프로토콜은 MessageErrorResponse에서 반환할 수 있도록 허용합니다. 이 Message에는 메시지에 대한 추가 정보를 찾을 수 있는 url과 사용자에게 URL을 여는 UI로 표시되는 urlLabel이 포함됩니다. VS Code가 사용자에게 모달 대화 상자로 메시지를 표시할 때 urlLabel이 캡션으로 표시되는 버튼이 표시됩니다. 이 릴리스 이전에는 VS Code에서 launch.json 열기라는 캡션의 버튼도 추가했습니다. 메시지의 url이 'command' 스키마(예: command:myExtension.fixError)를 사용하는 경우 이 버튼은 더 이상 추가되지 않습니다.

디버그 어댑터 프로토콜

새로운 "memory" 이벤트 출시

memory 이벤트가 완료되었으며 이제 디버그 어댑터 프로토콜 버전 1.49와 해당 npm 모듈에서 사용할 수 있습니다. 디버그 어댑터가 initialize 요청의 supportsMemoryEvent 기능에 대해 true 값을 받은 경우, 디버그 어댑터는 memory 이벤트를 발생시켜 일부 메모리 범위가 업데이트되었음을 나타낼 수 있습니다.

제안된 확장 API

모든 마일스톤에는 새로운 제안 API가 제공되며 확장 작성자는 이를 사용해 볼 수 있습니다. 언제나처럼 여러분의 피드백을 원합니다. 제안된 API를 사용하려면 다음을 수행해야 합니다.

  • 제안된 API는 자주 변경되므로 Insiders를 사용해야 합니다.
  • 확장의 package.json 파일에 이 줄이 있어야 합니다: "enableProposedApi": true.
  • vscode.proposed.d.ts 파일의 최신 버전을 프로젝트 소스 위치로 복사합니다.

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

유형 계층 구조 지원

확장 기능이 기호에 대한 상위 유형 및 하위 유형을 제공할 수 있도록 하는 TypeHierarchyProvider에 대한 API 제안이 있습니다. 이 API는 테스트할 준비가 되었으며 문제가 발견되거나 제안 사항이 있는 경우 VS Code 리포지토리에 입력할 수 있습니다.

어디서든 터미널 생성

제안된 터미널 위치 API를 사용하면 패널과 편집기 영역 모두에서 터미널 분할을 생성할 수 있습니다.

터미널이 "상호 작용됨"인지 여부에 대한 쿼리 및 이벤트

새로운 제안 API인 Terminal.state 및 window.onDidChangeTerminalState를 사용하면 터미널이 "상호 작용됨"인지 여부를 쿼리할 수 있습니다. 상호 작용은 프로세스로 데이터가 전송되었음을 의미하며 다양한 이유로 발생할 수 있으며, 주요 이유는 키보드 입력입니다.

QuickPickItems의 버튼

QuickPickItem에 버튼을 추가하고 처리하는 제안 API가 있습니다. 이를 통해 확장 기능이 Quick Pick와 더 풍부한 사용자 상호 작용을 제공할 수 있기를 바랍니다.

Buttons in QuickPickItems

직접 사용해 보시고 의견을 알려주세요. 참고할 점은 Quick Pick의 스크롤 위치에 현재 알려진 문제가 있으며, 이 새로운 제안 API로 인해 더 증폭될 것으로 생각합니다. 이 문제를 해결하기 위한 적절한 API 세트를 작업 중입니다. 이슈에 참여하여 의견을 공유해 주세요.

테스트 태그

테스트 태그는 테스트를 구성하는 방법과 실행 가능한 테스트를 나타내는 두 가지 기능을 제공하는 제안 API입니다.

오류가 아닌 테스트 출력

테스트 API는 테스트 실패 메시지를 지원하지만, 이전에는 특정 테스트 케이스와 오류가 아닌 출력을 연결할 방법이 없었습니다. TestRun.appendOutput 메서드에 선택적 TestItemlocation을 전달하여 이를 수행할 방법을 평가 중입니다. 의견이 있으시면 이슈 #129201에 피드백을 남겨주세요!

인라인 완성 제공자: 자동 완성 위젯과의 상호 작용

InlineCompletionContext에는 현재 자동 완성 위젯에서 선택된 제안에 대한 세부 정보를 포함하는 새로운 필드 selectedCompletionInfo가 있습니다. 또한 InlineCompletionItemProvider는 사용자가 자동 완성 위젯에서 선택한 항목을 변경할 때마다 인라인 제안을 요청합니다. 인라인 제안이 선택한 제안 항목을 확장하는 경우 확장 기능은 이탤릭체로 표시됩니다.

엔지니어링

RHEL7 및 Centos7 배포판 지원 수정

VS Code 버전 1.53에서 빌드 이미지를 업데이트하여 최신 Electron 버전을 사용함으로써 네이티브 모듈의 CXXABI 요구 사항이 변경되었고, 이는 일부 배포판에서 rpm 패키지를 손상시켰습니다 (이슈 #115784). Electron v13 업데이트를 통해 이제 런타임과 동일한 컴파일러 도구 체인으로 네이티브 모듈을 빌드할 수 있게 되었으며, 특히 Clang을 사용하고 런타임의 libcxx를 정적으로 연결합니다. 이를 통해 바이너리 크기가 약 10MB로 약간 증가하는 대신 CXXABI 요구 사항을 우회하여 이러한 배포판에 대한 지원을 복원할 수 있습니다. 기다려 주셔서 감사하며 Insiders에서 테스트해 주셔서 감사합니다.

문서

VS Code의 Julia

Julia in Visual Studio Code라는 새로운 주제에서 Julia 프로그래밍 언어 지원을 VS Code에서 Julia 확장 프로그램과 함께 설명합니다. Julia 확장 프로그램에는 코드 완성, 코드 탐색, 디버깅과 같은 풍부한 언어 기능과 통합 REPL 및 플롯 탐색기가 포함되어 있습니다.

Julia extension

Azure Machine Learning

VS Code의 Azure Machine Learning 개요를 읽고 Azure Machine Learning 확장 프로그램을 사용하여 VS Code에서 직접 Azure Machine Learning 클라우드 기반 머신러닝 모델을 작업하는 방법을 알아보세요.

주요 수정 사항

  • 82489: "AltGr" 키 사용 시 잘못된 키보드 입력
  • 115945: 디버그 도구 모음이 도킹되었을 때 기여된 명령이 누락됨
  • 118196: 디버그 세션을 다시 시작할 때 args-list의 요소가 업데이트되지 않음
  • 121201: iPad에서 메뉴 선택이 올바르게 렌더링되지 않음
  • 124128: 디버깅이 중지될 때 확장 기능 개발 창이 해제되지 않음
  • 125259: 디버그 시 시작 전에 launch.json을 저장하지 않음
  • 126102: SkipFiles가 여전히 건너뛸 파일을 임시로 열어 느려짐
  • 126911: 확장 기능 디버깅: 디버그 세션 중지가 창을 닫지 않음
  • 128484: launch 실패 시 모달 대화 상자를 비활성화하는 옵션
  • 129019: 트리뷰가 닫힌 상태로 시작되어 내용을 표시하려면 다시 새로고침(또는 다시 열기)해야 함
  • 129469: 설정 편집기의 입력 상자를 더 크게 만들 수 있음
  • 129645: 설정 UI에서 코드 블록 구문 강조 표시 활성화
  • 129844: markdownEnumDescriptions가 설정 UI에서 markdown ##을 제거하지 않고 settings.json에서 ##를 제거하지 않음
  • 130265: Node 디버거가 처리되지 않은 Promise 거부에 대해 중단되지 않음

감사합니다

마지막으로, 이번 달 VS Code에 기여해주신 다음 분들께 진심으로 감사드립니다.

이슈 추적에 대한 기여

vscode 기여

vscode-generator-code에 대한 기여

vscode-js-debug 기여

vscode-pull-request-github 기여

debug-adapter-protocol에 기여

language-server-protocol 기여

monaco-editor 기여

monaco-html에 대한 기여

monaco-languages에 대한 기여

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