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

2023년 5월 (버전 1.79)

업데이트 1.79.1: 이 업데이트는 이 보안 취약점을 해결합니다.

업데이트 1.79.2: 이 업데이트는 이 취약점들을 해결합니다.

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


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

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

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

접근성

상세 수준 설정

화면 판독기 사용자가 포커스가 있을 때 기능과 상호 작용하는 방법을 알리기 위해 추가적인 accessibility.verbosity 설정이 추가되었습니다.

GitHub Copilot의 경우, Copilot 채팅 보기 및 편집기 내 코드 채팅에 대한 접근 가능한 도움말 메뉴에 액세스하는 방법에 대한 힌트가 다음을 통해 제공됩니다.

  • accessibility.verbosity.panelChat
  • accessibility.verbosity.inlineChat

이 도움말 메뉴는 기대할 수 있는 내용, 입력 상자에서 다른 요소로 이동하는 방법 등에 대한 정보를 제공합니다.

다른 새로운 verbosity 설정은 특정 VS Code UI에 대한 정보를 제공합니다.

  • accessibility.verbosity.keybindingsEditor - 키 바인딩 편집기 내에서.
  • accessibility.verbosity.notebook - 노트북 내에서.

accessibility.verbosity 설정은 기본적으로 활성화되어 ('true'로 설정됨) 있지만 개별적으로 음소거할 수 있습니다.

설정 편집기

macOS의 VoiceOver는 이제 설정 편집기에서 열거형 설정 옵션의 설명을 읽습니다. files.autoSaveeditor.accessibilitySupport와 같은 열거형 설정을 사용하여 이를 사용해보세요.

onFocusChange option description of files.autoSave setting being displayed by VoiceOver's high-contrast textbox on macOS

워크벤치

읽기 전용 모드

일부 개발 시나리오에서는 작업 영역의 특정 폴더나 파일을 명시적으로 읽기 전용으로 표시하는 것이 유용할 수 있습니다. 예를 들어, 폴더 또는 파일 내용이 다른 프로세스(예: Node.js 패키지 관리자에서 관리하는 node_modules 폴더)에 의해 관리되는 경우, 읽기 전용으로 표시하면 실수로 인한 변경을 방지할 수 있습니다.

이러한 사용 사례를 위해 탐색기 및 텍스트 및 노트북 편집기에서 파일 경로를 읽기 전용으로 표시하는 새로운 설정이 있습니다.

  • files.readonlyInclude - 일치하는 파일은 읽기 전용으로 만듭니다. 경로 또는 glob 패턴.
  • files.readonlyExclude - files.readonlyInclude와 일치하는 경우 파일이 읽기 전용이 되는 것을 건너뜁니다. 경로 또는 glob 패턴.
  • files.readonlyFromPermissions - 디스크에 쓰기 권한이 없는 파일이 읽기 전용이어야 하는지 여부.

설정 규칙에 따라 경로가 읽기 전용으로 간주되면 탐색기(예: 삭제)에서 수정할 수 없으며 텍스트 또는 노트북 편집기는 읽기 전용이 됩니다.

임시로 읽기 전용 모드를 전환하려면, 설정 구성을 재정의하여 현재 세션에 대해서만 모드를 변경하는 새로운 명령이 있습니다.

  • 세션에서 활성 편집기 읽기 전용으로 설정 - 활성 편집기를 읽기 전용으로 표시합니다.
  • 세션에서 활성 편집기 쓰기 가능으로 설정 - 활성 편집기를 쓰기 가능으로 표시합니다.
  • 세션에서 활성 편집기 읽기 전용 토글 - 읽기 전용 및 쓰기 가능 간 전환합니다.
  • 세션에서 활성 편집기 읽기 전용 재설정 - 세션 상태를 재설정합니다.

Windows UNC 호스트 허용 목록 개선

중요 보안 수정의 일환으로 VS Code는 UNC 호스트에 대한 허용 목록을 도입했습니다. 이번 마일스톤에서는 Windows 사용자가 VS Code를 사용하여 일상 작업을 수행할 때 UNC 경로가 있는 경우 발생하는 사용성 문제를 많이 해결했습니다.

대화 상자 개선

시작 시 UNC 호스트를 허용하는 확인 대화 상자는 이제 security.allowedUNCHosts 설정을 업데이트하고 확인란을 선택하면 호스트를 추가합니다.

Windows UNC allow dialog

또한, 자세히 알아보기 버튼을 클릭해도 대화 상자가 더 이상 닫히지 않습니다.

새로운 security.restrictUNCAccess 설정

새로운 설정 security.restrictUNCAccess를 사용하면 호스트에 대한 UNC 허용 목록을 비활성화하고 이 보안 수정 이전에 동작했던 대로 복원할 수 있습니다. 이 설정은 시스템을 정보 공개 취약점에 다시 취약하게 만들므로 변경하지 않는 것이 좋습니다.

새 탭 크기 옵션 수정

workbench.editor.tabSizing 설정에는 모든 탭의 너비를 동일하게 만드는 새로운 옵션 fixed가 있습니다. 공간이 제한되면 탭은 최소까지 동일하게 축소됩니다. 새로운 설정 workbench.editor.tabSizingFixedMaxWidth는 탭의 초기 크기를 설정합니다.

이 모드에서는 마우스로 탭을 빠르게 닫을 때 탭의 너비가 일정하게 유지되어 동일한 지점을 클릭하여 각 탭을 닫을 수 있습니다. 마우스가 편집기 탭 영역을 벗어나면 너비가 조정됩니다.

네트워크 품질 표시

원격 컴퓨터에 연결되어 있을 때 VS Code 원격 편집 기능의 최적 경험을 위해서는 낮은 지연 시간을 가진 좋은 네트워크 연결이 필요합니다. 이번 마일스톤에서는 상태 표시줄의 원격 표시기를 업데이트하여 지연 시간이 매우 높거나 네트워크 연결이 오프라인으로 보이는 경우 피드백을 제공합니다.

높은 지연 시간 (웹, 데스크톱)

연결된 원격과의 지연 시간을 주기적으로 측정합니다. 특정 임계값에 도달하면 원격 표시기가 업데이트되어 이를 반영합니다.

Slow network detection shown in the right of the Status bar

오프라인 감지 (웹 전용)

원격에 연결하기 위해 웹 브라우저를 사용하는 중이고 인터넷 연결이 갑자기 끊어지면 원격 표시기가 업데이트되어 이를 반영합니다.

Web offline detection displaying "Network appears to be offline" message from the Status bar

계속 작업하기

계속 작업하기 기능은 동일한 저장소에 대해 VS Code 개발 환경 간에 작업 중인 변경 사항을 저장하고 검색할 수 있게 해줍니다. 예를 들어, 로컬 Git 저장소에서 GitHub codespace로 업그레이드하거나 동일한 저장소에 대해 다른 머신 간에 전환할 때 사용할 수 있습니다.

이제 한 환경에서 HTTP 원격으로 구성되고 다른 환경에서는 SSH 원격으로 구성된 경우에도 GitHub 저장소의 개발 환경 간에 작업 중인 변경 사항을 전송할 수 있습니다. 또한, 보다 원활한 전환을 위해 소스 제어 보기 상태 기본 설정과 같은 추가 워크벤치 상태를 전송하기 시작했습니다.

편집기

붙여넣기 형식

텍스트 편집기에 파일을 붙여넣을 때 삽입하려는 여러 가지 방법이 있을 수 있습니다. 파일의 절대 경로를 가리키고 싶을 수 있습니다. 현재 작업 영역에 상대적인 경로를 원할 수도 있습니다. 또는 현재 편집기의 언어에 특정한 것, 예를 들어 Markdown에 붙여넣을 때 파일에 대한 Markdown 링크 삽입을 원할 수도 있습니다. VS Code의 새로운 '붙여넣기 형식' 기능은 붙여넣은 콘텐츠가 삽입되는 방식을 제어할 수 있게 해줍니다.

붙여넣은 후, 붙여넣은 콘텐츠가 삽입될 수 있는 다른 방법이 있다면 VS Code는 이제 작은 '붙여넣기 형식' 컨트롤을 표시합니다.

'붙여넣기 형식' 컨트롤은 클릭하거나 ⌘. (Windows, Linux Ctrl+.) 키보드 단축키를 사용하여 열 수 있습니다. 붙여넣기 선택기는 타이핑을 시작하거나 삽입된 텍스트 외부로 커서를 이동하면 사라집니다. "editor.pasteAs.showPasteSelector": "never"를 사용하여 드롭 선택기 컨트롤을 완전히 비활성화할 수도 있습니다.

예를 들어 노트북의 Markdown 셀에 콘텐츠를 붙여넣을 때 '붙여넣기 형식' 컨트롤을 사용하여 다음을 전환할 수 있습니다.

  • 이미지를 첨부 파일로 삽입
  • Markdown 이미지 참조 삽입
  • 상대 경로 삽입 (작업 영역의 파일용)
  • 절대 경로 삽입

실제로 붙여넣기 전에 클립보드 콘텐츠를 어떻게 붙여넣을지 선택하는 것을 선호하는 경우, 대신 새로운 붙여넣기 형식... 명령을 사용할 수 있습니다. 이를 통해 콘텐츠를 어떻게 붙여넣을지 선택할 수 있습니다.

Using the Paste As... command to select how content is pasted

빠른 제안 및 스니펫

빠른 제안은 VS Code가 ⌃Space (Windows, Linux Ctrl+Space)을 누를 필요 없이 타이핑하면서 제안을 표시한다는 것을 의미합니다. 이 기능은 매우 인기가 많으며, 모든 제안 세션의 약 90%는 타이핑을 통해 시작됩니다. 많은 수의 제안이 Tab을 통해 수락됩니다(Enter 및 타이핑 허용 문자 대비).

스니펫이 삽입되는 동안 Tab 키는 스니펫 플레이스홀더 간을 이동하는 데 사용됩니다. 이제 스니펫이 삽입되는 동안 빠른 제안이 활성화되면 Tab 키는 완료를 수락하거나 다음 스니펫 플레이스홀더로 이동할 수 있습니다. 이 충돌을 해결하기 위해 스니펫이 삽입될 때 빠른 제안을 비활성화하는 editor.suggest.snippetsPreventQuickSuggestions 설정이 있습니다. 기본값은 true였으며 이 설정이 존재하는 한 혼란스럽다는 피드백을 받았습니다. 따라서 기본값을 false로 변경하기로 결정했습니다. 이렇게 하면 스니펫 플레이스홀더 내에서 타이핑하면 빠른 제안이 트리거됩니다.

그런 다음 다음 키 조합을 사용할 수 있습니다.

  • Tab을 눌러 완료를 수락합니다.
  • Escape을 눌러 빠른 제안을 숨깁니다.
  • 제안이 없을 때 Tab은 다음 스니펫 플레이스홀더로 이동합니다.

터미널

fish 셸 자동 셸 통합

셸 통합 및 향상된 사용자 경험이 이제 fish 셸에 대해 자동으로 활성화됩니다. 이를 작동시키려면 fish를 업데이트해야 할 수 있습니다.

Shell integration in fish enables several features

Overline 지원

ECMA-48에 지정된 overline 이스케이프 시퀀스(SGR 53, SGR 55)가 이제 터미널에서 지원됩니다. 이 시퀀스의 가장 일반적인 용도는 앱의 "상태 표시줄" 위에 줄을 추가하여 터미널의 맨 아래 행에 표시하는 것입니다.

The overline feature is similar to underline but will draw a line on top of the text

소스 제어

기본 브랜치 이름

이번 마일스톤부터 VS Code를 사용하여 생성된 모든 새 Git 저장소는 main을 기본 브랜치로 설정합니다. 기본 브랜치에 다른 이름을 선호하는 경우 git.defaultBranchName 설정을 사용하여 변경할 수 있습니다. 설정이 비어 있으면 VS Code는 Git에 구성된 기본 브랜치 이름을 사용합니다. GitHub에 폴더를 게시하는 것도 GitHub에 구성된 기본 브랜치 이름을 따릅니다.

vscode.dev 및 GitHub와의 브랜치 선택기 통합

이제 vscode.dev에서 브랜치를 체크아웃하거나 GitHub.com에서 열 수 있습니다. VS Code 데스크톱의 브랜치 선택기에서 가능합니다.

아래 짧은 동영상에서 브랜치 선택기 드롭다운에 나열된 각 브랜치에는 GitHub에서 열기 또는 vscode.dev에서 체크아웃 버튼이 오른쪽에 있습니다.

유사도 임계값

Git 상태는 유사도 인덱스(파일 크기에 비해 추가/삭제된 수)를 사용하여 추가/삭제 쌍을 이름 변경으로 간주할지 여부를 결정합니다. 이제 git.similarityThreshold 설정을 사용하여 유사도 임계값을 구성할 수 있으며, 값은 0에서 100 사이입니다. 기본값은 50입니다.

노트북

이제 검색 컨트롤에서 열려 있는 노트북의 풍부한 콘텐츠를 검색할 수 있습니다. 노트북이 열려 있으면 검색 컨트롤은 원본 파일의 내용을 검색하는 대신 노트북 편집기에서 보이는 방식에 따라 결과를 표시합니다. 이를 통해 노트북 입력에서 텍스트를 바꾸는 것도 가능합니다.

새로운 노트북 검색 토글을 사용하면 검색할 셀 콘텐츠 유형을 필터링할 수도 있습니다.

개선된 셀 출력 상호 작용

새로운 컨텍스트 키 notebookOutputInputFocused가 추가되어 셀 출력 내의 텍스트 상자에 포커스가 있는지 여부를 결정합니다. 따라서 출력에 포커스가 있을 때 원시 바로 가기 키 a/b/j/k를 안전하게 사용할 수 있습니다. 입력 상자에 포커스가 있으면 이러한 바로 가기 키가 트리거되지 않습니다.

실행 시 서식 지정

이제 노트북은 셀 실행 시 셀 서식을 지정할 수 있습니다. 이는 셀 실행, 모두 실행, 위/아래 실행 및 커널+실행 복합 명령을 트리거합니다. 이 기능은 "notebook.formatOnCellExecution": true 설정을 통해 켤 수 있습니다.

저장 시 코드 액션

이제 노트북은 저장 시 코드 액션 실행을 지원합니다. 코드 액션은 notebook.codeActionsOnSave 설정 아래에 지정할 수 있습니다. 확장 프로그램 작성자는 셀 수준 코드 액션에 대한 표준 타이핑을 사용하여 제공자를 정의하거나, 전체 노트북을 관리하는 코드 액션을 정의하기 위해 새로운 notebook. 접두사를 사용할 수 있습니다. 확장 프로그램이 이 새 설정을 사용하는 방법을 알아보려면 clean-nb-imports-ext 샘플 확장을 검토할 수 있습니다.

언어

TypeScript 5.1

VS Code는 이제 TypeScript 5.1.3과 함께 제공됩니다. 이 주요 업데이트는 새로운 TypeScript 언어 기능, 더 나은 성능, 그리고 많은 중요한 개선 사항 및 버그 수정을 제공합니다. TypeScript 블로그에서 TypeScript 5.1에 대해 읽을 수 있습니다.

JSX 태그의 연결된 편집

연결된 편집을 사용하면 여는 JSX 태그를 변경할 때 VS Code가 해당 닫는 태그를 자동으로 업데이트합니다. 이는 시간을 크게 절약할 수 있습니다.

이 기능은 기본적으로 꺼져 있지만 다음을 설정하여 활성화할 수 있습니다.

"editor.linkedEditing": true

연결된 편집 시작 명령을 사용하여 연결된 편집을 명시적으로 시작할 수도 있습니다.

F2를 사용하여 일치하는 JSX 태그 이름 바꾸기

JSX 태그에서 이름 바꾸기를 트리거할 때 VS Code는 이제 태그의 모든 참조를 업데이트하려고 시도하는 대신 일치하는 태그만 이름을 바꿉니다.

이 기능은 TypeScript 5.1 이상이 필요하며 HTML의 이름 바꾸기 동작과 일치합니다.

javascript.preferences.renameMatchingJsxTagstypescript.preferences.renameMatchingJsxTags를 사용하여 이 동작을 비활성화할 수 있습니다.

JSDoc @param 완성

JSDoc 주석을 작성할 때 VS Code는 이제 누락된 모든 매개변수에 대한 제안을 표시합니다.

JS Doc @param completions in a TypeScript file

이렇게 하면 문서를 빠르게 채우는 데 도움이 됩니다.

JavaScript 파일에서 @param 완성은 매개변수 유형 설명을 위한 플레이스홀더를 생성합니다.

Markdown에 외부 미디어 파일을 드롭하거나 붙여넣을 때 작업 영역으로 복사

이미지나 동영상을 Markdown 문서에 추가하고 싶으신가요? 파일을 먼저 수동으로 작업 영역으로 복사한 다음 링크를 추가하는 데 시간을 낭비하는 대신, 이제 Markdown에 파일을 드롭하거나 붙여넣기만 하면 됩니다. 파일이 현재 작업 영역의 일부가 아닌 경우 VS Code는 자동으로 파일을 작업 영역으로 복사하고 링크를 삽입합니다.

이는 클립보드의 이미지 데이터에도 매우 잘 작동합니다. 예를 들어, Windows의 캡처 도구로 스크린샷을 찍은 경우 Markdown 파일에 붙여넣기를 누르면 VS Code가 클립보드 데이터에서 새 이미지 파일을 만들고 새 파일에 대한 Markdown 이미지 링크를 삽입합니다. macOS에서도 Ctrl 키를 누른 채 스크린샷을 찍어 클립보드로 복사하면 작동합니다.

이 기능의 동작은 몇 가지 설정을 사용하여 사용자 지정할 수도 있습니다.

markdown.copyFiles.destination

markdown.copyFiles.destination 설정은 새 미디어 파일이 생성되는 위치를 제어합니다. 이 설정은 현재 Markdown 문서와 일치하는 glob를 이미지 대상에 매핑합니다. 이미지 대상은 간단한 변수도 사용할 수 있습니다. 사용 가능한 변수에 대한 정보는 markdown.copyFiles.destination 설정 설명을 참조하십시오.

예를 들어, 작업 영역의 /docs 아래의 모든 Markdown 파일이 새 미디어 파일을 현재 파일에 특정한 images 디렉터리에 넣도록 하려면 다음과 같이 작성할 수 있습니다.

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName}/"
}

이제 /docs/api/readme.md에 새 파일이 붙여넣어지면 이미지 파일은 /docs/api/images/readme/image.png에 생성됩니다.

스니펫의 변수 변환과 유사한 방식으로 간단한 정규 표현식을 사용하여 변수를 변환할 수도 있습니다. 예를 들어, 이 변환은 미디어 파일을 만들 때 문서 파일 이름의 첫 글자만 사용합니다.

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName/(.).*/$1/}/"
}

/docs/api/readme.md에 새 파일이 붙여넣어지면 이미지는 이제 /docs/api/images/r/image.png 아래에 생성됩니다.

markdown.copyFiles.overwriteBehavior

markdown.copyFiles.overwriteBehavior 설정은 새로 생성된 미디어 파일이 기존 파일을 덮어쓸지 여부를 제어합니다.

기본적으로 VS Code는 기존 파일을 절대 덮어쓰지 않습니다. 대신 image.png라는 파일이 있고 작업 영역에 이미 image.png가 있는 Markdown 문서에 붙여넣으려고 하면 VS Code는 대신 image-1.png라는 새 파일을 만듭니다. 그런 다음 image.png라는 다른 파일을 붙여넣으려고 하면 대신 image-2.png로 생성됩니다.

기존 파일이 새 파일에 의해 덮어쓰여지도록 하려면 "markdown.copyFiles.overwriteBehavior": "overwrite"로 설정하십시오. 이제 VS Code는 항상 원본 파일 이름을 사용하고 해당 경로의 기존 파일을 덮어씁니다.

작업 영역으로 파일 복사 비활성화

VS Code는 파일이 작업 영역에 이미 포함되어 있지 않은 경우에만 작업 영역으로 복사를 시도합니다. 또한 현재는 미디어 파일(이미지, 동영상, 오디오)만 작업 영역으로 복사합니다.

하지만 이 새로운 동작이 너무 침입적이라고 생각되면 드롭 및 붙여넣기 모두에 대해 다음을 설정하여 비활성화할 수 있습니다.

"markdown.editor.drop.copyIntoWorkspace": "never"
"markdown.editor.filePaste.copyIntoWorkspace": "never"

Markdown 파일의 HTML 경로 IntelliSense

많은 Markdown 방언에서 Markdown 문서에 일반 HTML 태그를 사용할 수 있습니다. 이번 업데이트에서는 대부분의 VS Code Markdown IntelliSense 기능이 이러한 HTML 태그에 사용된 파일 경로로 확장되었습니다. 여기에는 다음이 포함됩니다.

Finding all references to an image file used in an HTML tag

Markdown에 오디오 삽입

오디오 파일을 Markdown 문서로 드롭하거나 복사하여 붙여넣으면 VS Code는 이제 <audio> 요소를 삽입합니다.

JSON with Lines (JSONL) 파일 구문 강조

JSON with Lines는 줄 바꿈 문자로 구분된 JSON 객체의 시퀀스를 설명합니다. 파일 확장자가 jsonl인 경우 VS Code는 구문 강조를 제공합니다.

원격 개발

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

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

  • 새 원격 연결 열기 (원격 터널, 개발 컨테이너로) 현재 또는 새 VS Code 창에서.
  • 포워딩된 포트를 공개하기 위한 쉬운 워크플로우.
  • 웹용 VS Code(vscode.dev)에서 WSL에 연결하기 위한 사전 지원.

새 확장 프로그램 기능 및 버그 수정은 원격 개발 릴리스 노트에서 확인할 수 있습니다.

확장 프로그램 기여

GitHub Copilot

안정적인 VS Code에서 Copilot 채팅 사용

이전에는 Copilot 채팅을 사용하려면 VS Code Insiders를 사용해야 했습니다. VS Code 1.79부터 안정적인 VS Code에서도 Copilot 채팅을 사용할 수 있습니다. 여전히 GitHub Copilot Chat 확장 프로그램을 설치해야 합니다.

편집기 채팅

편집기 채팅을 개선했습니다. 특히 기본 모드를 "livePreview"로 변경했습니다. 이 모드에서는 변경 사항이 문서에 직접 적용되고 포함된 diff 보기에 표시됩니다. 아래 예시를 살펴보겠습니다.

  • IUserFriendlyStatusItemEntry 유형에 새 속성이 추가되었고
  • Copilot는 그에 따라 isUserFriendlyStatusItemEntry 검사를 업데이트했습니다.
  • 응답은 포함된 diff 보기를 사용하여 편집기에 표시됩니다. 오른쪽이 편집 가능하며 VS Code의 언어 확장 프로그램에서 확인합니다.
  • 이렇게 하면 응답의 오류(isMarkdownString 함수가 존재하지 않음 아래)를 발견하고 제안을 수락하기 전에 수정할 수 있습니다.

Copilot inline chat suggestion with proposed code change displayed as a live preview

노트북 개선 사항

이번 달에는 노트북 편집기에서의 채팅 경험을 개선했습니다. 노트북 문서에서 Copilot를 사용할 때 Copilot는 노트북 컨텍스트를 사용하여 더 관련성 높은 제안을 제공할 수 있습니다. 예를 들어, 코드 제안은 이전 셀에 정의된 변수나 모듈을 다시 생성하거나 재 가져오지 않고 사용합니다.

노트북 셀을 실행할 때 Copilot는 이제 셀 실행 실패에 대한 제안도 제공합니다. 셀 상태 표시줄의 Copilot로 수정 액션을 선택하여 이를 표시할 수 있습니다.

Copilot 제안은 셀 실행 시 자동으로 수락되므로 수동으로 수락할 필요가 없습니다.

GitHub Pull Request 및 Issues 통합

GitHub Pull Requests and Issues 확장 프로그램이 설치 및 활성화되어 있고 검토 스레드를 보고 있을 때, Copilot를 사용하여 검토 댓글을 직접 적용할 수 있습니다. 이는 댓글 메뉴의 AI로 제안 적용 버튼을 통해 수행할 수 있습니다.

실험적인 빠른 질문 경험

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

이번 반복에서는 컨텍스트를 벗어나지 않고 빠른 프로그래밍 질문을 하기 위해 채팅을 사용하는 실험을 했습니다. 채팅 경험에 액세스할 수 있는 경우 다음 설정을 사용하여 이 기능을 활성화할 수 있습니다.

"chat.experimental.quickQuestion.enable": true

기능 개요

  • Copilot에게 빠른 질문을 합니다.
  • ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L)로 경험을 전환합니다 (상태는 30초 동안 기억되어 쉽게 표시, 숨기기, 다시 표시할 수 있습니다).
  • 대화 상자를 사용하여 장문의 채팅으로 대화를 계속하기 위한 채팅에서 열기 버튼.

채팅 항목 삭제

이제 채팅 요청의 X 아이콘을 클릭하여 채팅 요청/응답 쌍을 삭제할 수 있습니다.

A chat request with X icon

이것을 원하는 이유는 무엇인가요? 때로는 Copilot가 주제에서 벗어나거나 잘못된 응답을 제공할 수 있습니다. 질문을 다시 할 수 있지만, 세션의 채팅 기록에서 잘못된 응답을 제거하면 대화를 순조롭게 유지하는 데 도움이 될 수 있습니다. 또한 각 채팅 요청에 포함될 수 있는 컨텍스트의 양에 제한이 있으므로 긴 잘못된 응답을 제거하면 컨텍스트 예산을 더 유용한 정보를 위해 절약하는 데 도움이 될 수 있습니다.

채팅 세션을 사이드바에서 편집기로 이동

채팅: 편집기 열기 명령을 실행하여 편집기에서 채팅 세션을 여는 것은 이미 가능했지만, 이제 채팅 세션을 사이드바와 편집기 간에 앞뒤로 이동하는 것도 가능합니다. 채팅 보기 제목 또는 편집기 제목 메뉴의 "..." 메뉴에서 편집기에서 세션 열기사이드바에서 세션 열기 명령을 찾을 수 있습니다.

채팅 세션 기록

채팅 세션이 이제 기록에 저장됩니다. 채팅 보기 제목 메뉴의 기록 보기 버튼을 선택하여 찾아볼 수 있습니다. 기록 항목을 선택하여 채팅 편집기로 해당 대화를 로드한 다음, 중단한 부분부터 원활하게 계속할 수 있습니다. 각 행의 X 버튼을 클릭하여 기록에서 세션을 제거할 수 있습니다.

채팅 세션을 JSON 파일로 내보내기

채팅: 세션 내보내기 명령이 추가되었습니다. 이 명령은 현재 포커스된 채팅 세션을 JSON 파일로 내보냅니다. 그런 다음 채팅: 세션 가져오기 명령을 실행하여 이 세션을 가져오고 대화를 계속할 수 있습니다. 이 파일을 저장소에 커밋하거나 다른 사람과 공유하거나 단순히 대화를 나중에 참조하기 위해 저장할 수 있습니다. 가져온 채팅 세션에서 대화를 계속할 때 새 메시지는 세션을 다시 내보내지 않으면 저장되지 않습니다.

코드 블록 탐색 및 키 바인딩

채팅 응답에서 코드 블록 작업을 더 쉽게 만드는 몇 가지 명령과 키 바인딩을 추가했습니다. 채팅: 다음 코드 블록 (⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown)) 및 채팅: 이전 코드 블록 (⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp))은 현재 채팅 응답에서 커서를 다음 또는 이전 코드 블록으로 이동합니다. 코드 블록에 포커스가 있을 때 코드 블록 도구 모음의 명령도 명령 팔레트에서 호출하거나 키 바인딩을 할당할 수 있습니다. 터미널에서 실행은 기본적으로 키 바인딩이 할당되어 있습니다. ⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter). 선택 항목이 없는 코드 블록에서 일반 복사 키 바인딩을 누르면 복사 명령이 실행됩니다.

또한 채팅 창에 포커스를 맞추는 키 바인딩(⌃⌘I (Windows, Linux Ctrl+Alt+I))과 채팅 세션을 지우는 키 바인딩()을 추가했습니다.

Copilot YouTube 재생 목록

GitHub Copilot 및 팁과 요령, 모범 사례에 대해 자세히 알아보려면 YouTube의 VS Code Copilot 시리즈를 시청하세요. 거기에는 GitHub Copilot 소개, 언어별 사용 및 개발을 위해 Copilot를 사용할 때 효과적인 프롬프트에 대한 지침이 있습니다.

Python

Python 파일을 전용 터미널에서 실행

Python 확장 프로그램은 이제 편집기 상단의 실행 버튼 또는 Python: 터미널에서 Python 파일 실행 명령을 사용하여 실행하는 각 파일에 대해 새 터미널을 생성하고, 다시 실행할 때마다 해당 파일의 "전용" 터미널을 계속 사용합니다.

같은 파일을 별도의 터미널에서 실행하고 싶을 때마다 실행 버튼 메뉴 아래의 Python: 전용 터미널에서 Python 파일 실행을 선택하여 실행할 수 있습니다.

Options under the run button menu

테스트 검색 및 실행 재작성

이번 달에는 테스트 재작성을 실험으로 롤아웃하기 시작했습니다. 이 재작성은 확장 프로그램 내 unittest 및 pytest 모두에 대한 테스트 검색 및 실행의 아키텍처를 재설계합니다. 사용자에게 추가 기능을 제공하지는 않지만, 버그가 있는 동작을 줄이고 향후 새로운 기능 기회를 열어줍니다. 이 재작성은 pythonTestAdapter 실험 뒤에서 롤아웃되며, settings.json에서 python.experiments.optInto를 사용하여 선택하거나 해제할 수 있습니다. 결국 이 설정을 제거하고 이 새로운 아키텍처를 채택할 계획입니다. 이 실험 또는 재작성에 대한 의견이나 제안이 있으면 vscode-python 저장소에 공유할 수 있습니다.

Pylance로 구성 가능한 인덱싱 제한

인덱싱 파일 수 제한을 구성할 수 있는 새로운 Pylance 설정이 있습니다: "python.analysis.userFileIndexingLimit"이며 기본값은 2000입니다. 이 설정은 매우 큰 프로젝트를 작업하고 성능을 희생하여 IntelliSense 경험을 향상시키고 싶을 때 유용할 수 있습니다.

Jupyter

원격 Jupyter 커널에 대한 셀 실행 재개

이제 Jupyter 확장은 VS Code를 종료한 후에도 노트북을 다시 열었을 때, 셀이 아직 실행 중이라면 원격 Jupyter 커널에 대해 셀 실행을 재개하는 것을 지원합니다.

예를 들어, 원격 Jupyter 커널을 대상으로 모델 학습과 같은 오랜 시간 실행되는 코드 섹션을 실행한다고 가정해 봅시다. 이는 몇 분 또는 더 오래 걸릴 수 있으므로 그동안 VS Code를 종료하기로 결정할 수 있습니다. 몇 분 후 VS Code를 다시 시작하고 동일한 노트북을 열면, 셀이 여전히 실행 중이라면 이 상태가 노트북 셀에 반영되며 새로운 출력은 셀 출력에 표시됩니다.

반면, VS Code가 종료되는 동안 셀이 실행을 완료했다면, 그동안 생성된 출력은 노트북에 보존되지 않습니다. 이러한 방식으로 실행을 재개하고 새 출력을 표시하는 것은 일반 텍스트, HTML, 이미지 등과 같은 간단한 출력으로 제한됩니다. 위젯 및 기타 복잡한 출력의 상태 복원은 지원되지 않습니다.

Resuming notebook cell execution after closing and reopening VS Code

GitHub Pull Requests 및 Issues

작업, 생성 및 관리할 수 있는 GitHub 끌어오기 요청 및 문제 확장에 대한 추가 작업이 이루어졌습니다. 주요 내용은 다음과 같습니다.

  • 체크아웃된 PR의 diff를 보는 두 가지 새로운 동작: 기본 브랜치와 Pull Request 헤드 비교(읽기 전용)Pull Request 헤드와 로컬 비교.
  • 새로운 설정 "githubPullRequests.pullPullRequestBranchBeforeCheckout"을 사용하여 동일한 PR 브랜치를 다시 체크아웃할 때 이전에 체크아웃된 PR 브랜치를 가져오는 것을 비활성화할 수 있습니다.

확장의 0.66.0 릴리스에 대한 변경 로그를 검토하여 다른 주요 내용을 알아보세요.

미리 보기 기능

insiders.vscode.dev에서 프로젝트 전체 JS/TS IntelliSense

vscode.dev는 브라우저에서 완전히 실행되는 VS Code의 경량 버전입니다. 이번 업데이트에서는 vscode.dev의 JavaScript 및 TypeScript 지원을 크게 강화하여 현재 열려 있는 파일로 제한되는 대신 작업 공간의 모든 파일을 분석할 수 있게 되었습니다. 이를 통해 코드 탐색이 크게 향상되어 심볼에 대한 정의로 이동모든 참조 찾기가 가능해집니다. 또한 tsconfig.json / jsconfig.json의 설정을 존중하도록 IntelliSense를 개선했습니다. 코드를 작성하는 동안 자동 가져오기도 지원합니다.

아래 이미지에서 참조 보기는 작업 공간의 ITextDocument에 대한 모든 참조를 표시하고 있습니다.

Find All References in a TypeScript project on vscode.dev

이러한 새로운 IntelliSense 기능은 로컬 컴퓨터에서 연 폴더와 vscode.dev의 내장 GitHub Repositories 확장을 사용하여 연 GitHub 저장소 모두에서 작동합니다.

vscode.dev의 JS/TS IntelliSense에는 여전히 몇 가지 제한 사항이 있다는 점을 염두에 두세요.

  • 현재 서드파티 라이브러리에 대한 IntelliSense 지원은 없습니다.
  • 현재 JavaScript 프로젝트에 대한 자동 형식 가져오기 지원은 없습니다.
  • 위의 제한 사항 때문에 vscode.dev에서는 모든 형식 오류가 비활성화됩니다.
  • 프로젝트 전체 IntelliSense는 현재 vscode.dev의 Insiders 버전인 insiders.vscode.dev에서만 활성화됩니다. 이 기능은 현재 github.dev에서는 비활성화되어 있습니다.

향후 이러한 제한 사항을 해결할 계획이며, 웹에서 JavaScript 및 TypeScript 지원을 계속 강화하게 되어 기쁩니다!

터미널의 이미지

터미널에서 이미지에 대한 실험적 지원이 추가되었습니다. 터미널의 이미지는 일반적으로 이미지 픽셀 데이터를 텍스트로 인코딩하여 특수 이스케이프 시퀀스를 통해 터미널에 기록하는 방식으로 작동합니다. 현재 지원되는 프로토콜은 sixeliTerm에서 선구한 인라인 이미지 프로토콜입니다.

기능을 활성화하려면

"terminal.integrated.experimentalImageSupport": true

활성화되면 테스트하려면 libsixel 저장소에서 .six 예제 파일을 다운로드하여 cat 할 수 있습니다.

Running cat with a sixel file will print an image

또는 Png, Gif 또는 JPG 파일을 사용하여 imgcat python 패키지 또는 imgcat 스크립트를 사용할 수 있습니다.

Running imgcat with a png file will print the image

이 기능의 현재 제한 사항은 다음과 같습니다.

TypeScript 5.2 지원

이번 업데이트에는 곧 출시될 TypeScript 5.2 릴리스에 대한 지원이 포함됩니다. TypeScript 팀이 현재 작업 중인 내용에 대한 자세한 내용은 TypeScript 5.2 반복 계획을 확인하세요. 곧 출시될 몇 가지 흥미로운 도구 하이라이트에는 다음이 포함됩니다.

  • 새로운 인라인 상수 리팩토링.
  • 심볼을 기존 파일로 이동할 수 있는 새로운 파일로 이동 리팩토링.

TypeScript 5.2 야간 빌드를 사용하려면 TypeScript Nightly 확장을 설치하세요.

JavaScript 및 TypeScript를 위한 파일로 이동 리팩토링

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

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

대안으로, 일반 파일 선택기를 사용하여 파일을 선택하려면 기존 파일 선택...을 사용하거나 생성될 새 파일을 지정하려면 새 파일 경로 입력...을 사용할 수 있습니다.

이 기능은 아직 적극적으로 개발 중이므로 사용해 보고 피드백을 공유해 주세요!

웹용 VS Code에서 WebAssembly

vscode.dev에 더 많은 프로그래밍 언어 지원을 추가하기 위해 VS Code 팀은 웹용 VS Code에서 일반 WebAssembly를 실행하는 방법을 조사해 왔습니다. 이 접근 방식에 관심이 있고 자세히 알고 싶다면 최근 VS Code 및 WebAssembly 블로그 게시물을 확인하세요.

확장 프로그램 작성

로컬 파일에 대한 vscode.fs 성능 향상

vscode.fs API를 사용하여 파일 작업을 할 때(해야 합니다!), 확장 호스트에 로컬인 파일에 대한 작업이 훨씬 빠르게 해결됩니다.

이전에는 확장 호스트가 이러한 작업을 VS Code 클라이언트에 위임하여 실행했지만, 이제는 확장 호스트 내에서 직접 실행되어 왕복 횟수를 줄여줍니다.

더 엄격한 상태 표시줄 API

상태 표시줄 항목 createStatusBarItem을 생성하는 API를 통해 확장은 식별자를 전달할 수 있습니다. 이 식별자는 상태 표시줄 항목을 숨기고 표시하는 데 사용됩니다. 식별자는 확장 프로그램마다 고유해야 하지만 지금까지는 강제되지 않았습니다. 이번 릴리스에서는 이를 좀 더 엄격하게 적용하여 동일한 식별자를 가진 동일한 확장에서 생성된 상태 표시줄 항목이 이제 하나로 병합됩니다.

작업

작업 완료 시 터미널을 닫는 작업 프레젠테이션 옵션이 최종 확정되었습니다.

제안된 API

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

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

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

EnvironmentVariableCollection.description

이 제안을 통해 EnvironmentVariableCollection에 대한 설명을 지정할 수 있으며, 이는 터미널 탭 호버에서 사용자에게 표시되어 변경이 정확히 무엇을 하는지 설명합니다.

// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';

Environment variable collection descriptions are explained in a terminal tab's hover

EnvironmentVariableMutator.options

이 제안은 EnvironmentVariableMutator에 제공할 수 있는 옵션을 추가하여, 환경 변수 변경이 프로세스 생성 시 또는 셸 통합 스크립트(셸 초기화 스크립트 실행 후)에서 적용되는 시점을 정확히 지정할 수 있습니다.

const collection = context.environmentVariableCollection;
// Apply only when the process is created
collection.replace('FOO', 'bar');
// Apply only during the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: false,
  applyAtShellIntegration: true
});
// Apply twice, during process creation and the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

공유 공급자

Share API 제안을 통해 확장은 VS Code에서 리소스를 공유하는 방법을 제공할 수 있습니다.

공유 공급자 결과는 현재 최상위 공유... 명령 팔레트 동작 및 "workbench.experimental.share.enabled": true"window.commandCenter": true로 옵트인한 경우 명령 센터 근처의 새 아이콘으로 표시됩니다.

API 제안 이슈 #176316에서 피드백을 남겨주세요.

정적 상태 표시줄 항목

상태 표시줄 항목은 이제 package.json#contributes/statusBarItems를 통해 정적으로 기여할 수 있습니다. 이 기여 지점을 통해 확장은 활성화를 지연하고 상태 표시줄 항목과 상호 작용할 때(예: 명령)만 활성화할 수 있습니다. 활성화되면 확장은 vscode.window.createStatusBarItem API를 통해 정적 상태 표시줄 항목에 액세스할 수 있습니다.

workspace.save 및 workspace.saveAs

Save Editor API 제안을 통해 확장은 편집기를 리소스에 저장하거나 사용자에게 리소스를 제공하도록 요청하는 흐름을 트리거할 수 있습니다.

저장하는 모든 메서드는 결과 Uri 또는 작업이 취소된 경우 undefined를 반환합니다. 임시 파일은 경로가 이미 연결되어 있지 않은 한 항상 사용자에게 대상 경로를 묻습니다.

인증 authGetSessions 제안 API

다중 GitHub 계정 지원에 가까워짐에 따라 확장이 특정 범위 집합에 대해 액세스 가능한 모든 세션을 가져올 수 있는 새로운 제안 인증 API가 있습니다. 이 API 추가에 대한 제안에는 몇 가지 주목할 만한 점이 있습니다.

  • 확장이 액세스할 수 있는 각 계정에 대한 세션을 가져오는 vscode.authentication.getSessions의 도입. 추가 계정을 요청하려면 { createIfNone: true, clearSessionPreference: true }를 사용하여 사용자에게 계정을 선택하도록 요청하세요.
  • forceNewSession 속성은 이제 { sessionToRecreate: session } 객체를 받을 수 있으므로 소비하는 확장은 다시 생성하려는 특정 세션을 지정할 수 있습니다.
  • Auth Provider가 구현하는 createSession 함수에는 이제 다시 생성할 세션이 전달됩니다(forceNewSession 값에 true가 사용된 경우 확장 프로그램의 세션 선호도 사용).

GitHub 인증 확장 프로그램에서 이 기능을 사용하려면 아직 작업할 것이 더 많이 남아 있습니다. 따라서 관심 있는 경우 계속 지켜보고 이 제안을 추적하는 이슈에 피드백을 제공할 수 있습니다.

창 활동 API

창이 활성 또는 비활성이 되는지 확장에 알리기 위한 새로운 API를 사용할 수 있습니다. 이는 리소스를 절약하기 위해 유휴 상태로 둘 수 있는 영구 리소스 또는 프로세스를 폐기하거나 생성하는 데 사용될 수 있습니다.

기존 WindowState 유형에 새로운 active 부울을 추가하여 구현됩니다.

vscode.window.onDidChangeWindowState(state => {
  if (state.active && !longRunningProcess) {
    longRunningProcess = startLongRunningProcess();
  } else if (!state.active && longRunningProcess) {
    longRunningProcess.end();
    longRunningProcess = undefined;
  }
});

엔지니어링

모든 사용자에게 Electron 샌드박스 활성화

Electron 샌드박스가 모든 사용자에게 출시됨을 발표하게 되어 기쁩니다. 이는 2020년 초에 시작된 여정이었으며 이제 마침내 끝납니다. 자세한 내용은 VS Code를 프로세스 샌드박싱으로 마이그레이션 블로그 게시물을 참조할 수 있습니다.

확장 호스트 재시작 참여

워크벤치의 특정 동작은 현재 창을 다시 로드하지 않고 확장 호스트를 다시 시작하게 할 수 있습니다. 예를 들어 프로필을 전환할 때 VS Code는 해당 프로필에 대해 다른 확장 집합을 실행하기 위해 확장 호스트를 다시 시작합니다.

그러나 일부 사용자 지정 및 노트북 편집기는 해당 프로필에 필요한 확장이 설치되지 않아 프로필을 전환한 후 더 이상 작동하지 않을 수 있습니다. 저장되지 않은 변경 사항이 있는 경우 데이터 손실을 유발할 수 있습니다. 이를 해결하기 위해 VS Code의 구성 요소는 이제 확장 호스트 다시 시작에 참여하여 확장 호스트가 다시 시작되기 전에 저장되지 않은 변경 사항이 저장되도록 할 수 있습니다.

다음 마일스톤에서는 이 경험을 더욱 발전시킬 계획이므로 계속 주목해 주세요!

Windows 8 및 8.1 지원 종료

v1.77 릴리스 노트의 EOL 경고에서 언급했듯이, v1.79는 Windows 8 / Windows Server 2012 및 Windows 8.1 / Windows Server 2012 R2를 지원하는 마지막 릴리스입니다. 자세한 내용은 FAQ를 참조하세요.

마일스톤 자동화

모든 GitHub 저장소에서 월별 마일스톤 복제를 구현했습니다. 이는 microsoft/vscode에 설정된 월별 마일스톤이 생성되고 유지 관리되는 다른 모든 마일스톤의 기초 역할을 한다는 것을 의미합니다.

Microsoft Build의 VS Code

Microsoft Build 2023 라이브를 시청할 기회가 없었다면, Microsoft Developer YouTube 채널에서 기조 연설 및 세션을 다시 볼 수 있습니다. Microsoft Developer YouTube 채널.

VS Code 사용자에게 특히 흥미로운 세션은 다음과 같습니다.

주요 수정 사항

  • 165933 [emmet] 2023년의 http-equiv="X-UA-Compatible"
  • 181889 treeView.reveal(expand: 3)는 첫 번째 레벨 3 폴더만 확장합니다.

감사합니다

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

이슈 추적

이슈 추적에 대한 기여

풀 리퀘스트

vscode 기여

vscode-css-languageservice에 대한 기여

vscode-js-debug 기여

vscode-pull-request-github 기여

monaco-editor 기여

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