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

2023년 4월 (버전 1.78)

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

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

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


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

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

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

접근성

Aria 음성 안내 설정

화면 읽기 프로그램 사용자는 `"accessibility.verbosity.diff-editor"` 및 `"accessibility.verbosity.terminal"` 설정을 통해 기능의 `aria-label`에서 힌트를 제외하여 중복을 줄일 수 있습니다.

개선되고 정렬된 빠른 선택 환경

이전에는 접근성 모드 사용자가 명령 팔레트 및 기타 빠른 선택을 사용할 때 다른 동작을 경험했습니다. 접근성 모드에서는 완전한 접근성을 위해 빠른 선택의 첫 번째 항목이 선택되지 않았습니다. 이번 반복에서는 두 가지 장점(접근성이 뛰어나면서도 빠른 빠른 선택 워크플로)을 모두 제공하는 새로운 동작을 도입했습니다. 이를 통해 바로 Enter를 누를 수 있습니다.

참고: 이 접근 방식의 한 가지 절충점은 빠른 선택의 항목이 선택되면 ARIA 제한으로 인해 빠른 선택 입력 상자에 대한 ARIA 변경 사항을 들을 수 없다는 것입니다. 이러한 변경 사항을 들으려면 목록의 항목이 선택되지 않을 때까지 Shift + Tab을 누르세요.

터미널

터미널 접근성 버퍼 개선

  • 터미널에서 ⌥↓ (Windows, Linux Alt+Down)⌥↑ (Windows, Linux Alt+Up)을 사용하여 명령 간에 이동합니다.
  • 선택 앵커 설정, 앵커에서 커서까지 선택, 페이지 탐색을 ⇧PageUp (Windows, Linux Shift+PageUp)⇧PageDown (Windows, Linux Shift+PageDown)을 사용하여 수행합니다.
  • 접근성 보기에서 기호로 이동 (⇧⌘O (Windows, Linux Ctrl+Shift+O))을 사용하여 명령을 수락하기 전에 새 위치로 이동할 때 위치를 미리 봅니다.
  • 동적 업데이트가 발생하는 동안 출력과 상호 작용합니다.

터미널 접근성 도움말 메뉴

터미널의 접근성 도움말 메뉴는 이제 화살표 키를 사용하여 탐색할 수 있습니다.

차이 편집기 오디오 신호 개선

VS Code는 이제 오디오 신호를 캐싱하므로 한 번만 로드하면 되어 응답성이 향상되었습니다. 또한 차이 편집기에 사용되는 톤을 개선했습니다.

줄/열로 이동 발표

줄/열로 이동... (⌃G (Windows, Linux Ctrl+G))이 호출되면 화면 읽기 프로그램이 이제 관련 줄 내용을 읽습니다.

워크벤치

새로운 기본 색상 테마

새로운 'Dark Modern' 및 'Light Modern' 테마가 'Dark+' 및 'Light+'를 대체하여 새로운 기본 다크 및 라이트 색상 테마가 되었습니다.

Dark Modern and Light Modern color themes

프로필 템플릿

프로필을 사용하면 현재 프로젝트 또는 작업에 따라 편집기 확장, 설정 및 UI 레이아웃을 빠르게 전환할 수 있습니다. 프로필 시작에 도움이 되도록 다양한 프로그래밍 언어 및 시나리오를 위한 큐레이션된 프로필인 프로필 템플릿을 제공합니다. 프로필 템플릿을 그대로 사용하거나 자신만의 워크플로에 맞게 사용자 지정하기 위한 시작점으로 사용할 수 있습니다.

프로필 > 프로필 만들기... 드롭다운을 통해 프로필 템플릿을 선택합니다.

Create Profile dropdown with profile templates

프로필 템플릿을 선택한 후 설정, 확장 및 기타 데이터를 검토하고 새 프로필에 포함하지 않으려는 개별 항목을 제거할 수 있습니다.

Profiles view showing the contents of the Data Science profile template

템플릿 기반으로 새 프로필을 만든 후 설정, 확장 또는 UI에 대한 변경 사항은 프로필에 유지됩니다.

글리프 여백 장식 렌더링 개선

이번 달에는 편집기 여백에 나타나는 장식의 렌더링을 개선했습니다. 중단점 및 스택 프레임 포인터와 같은 디버깅 관련 장식은 항상 편집기 줄 번호 옆에 렌더링됩니다. 추가 장식은 디버깅 관련 장식의 왼쪽에 렌더링됩니다. 이를 통해 테스트 장식이나 북마크와 같이 동일한 줄에 다른 장식이 있더라도 중단점을 볼 수 있습니다. 클릭은 아직 개별 장식에 범위가 지정되지 않습니다.

bookmarks displayed next to breakpoint and stack frame pointer decorations

이미지 미리 보기에서 이미지 복사

이제 내장 이미지 미리 보기에서 ⌘C (Windows, Linux Ctrl+C)를 사용하거나 미리 보기에서 마우스 오른쪽 버튼을 클릭하고 복사를 선택하여 이미지를 복사할 수 있습니다. 복사된 이미지 데이터는 VS Code 또는 다른 애플리케이션에 붙여넣을 수 있습니다.

편집기

끌어서 놓기 선택기

VS Code를 사용하면 파일을 끌어다 놓기 전에 Shift를 누르고 있으면 텍스트 편집기로 파일을 끌어다 놓을 수 있습니다. 이번 업데이트에서는 이 콘텐츠가 파일에 삽입되는 방식을 변경할 수 있는 UI가 추가되었습니다. 예를 들어 Markdown 파일에 이미지를 끌어다 놓은 후 이 컨트롤을 사용하면 Markdown 이미지, 이미지에 대한 작업 영역 상대 경로, 이미지의 전체 경로 삽입 중에서 전환할 수 있습니다.

끌어서 놓기 선택기 컨트롤은 콘텐츠를 끌어다 놓았고 삽입될 수 있는 방법이 하나 이상일 때마다 나타납니다. 컨트롤을 클릭하거나 ⌘. (Windows, Linux Ctrl+.)를 사용하여 컨트롤을 열 수 있습니다. 끌어서 놓기 선택기는 타이핑을 시작하거나 삽입된 텍스트 외부로 커서를 이동하면 사라집니다. `editor.dropIntoEditor.showDropSelector": "never"` 설정을 사용하여 끌어서 놓기 선택기 컨트롤을 완전히 비활성화할 수도 있습니다.

VS Code에는 일반적인 콘텐츠 형식을 끌어다 놓을 수 있는 몇 가지 내장 방법이 포함되어 있습니다. 확장 프로그램도 `DocumentDropEditProvider` API를 사용하여 자체 끌어서 놓기 옵션을 추가할 수 있습니다.

독립 실행형 색상 선택기

이제 독립 실행형 색상 선택기를 실행하여 색상을 삽입하고 바꿀 수 있습니다. 색상 선택기를 열려면 명령 팔레트에서 독립 실행형 색상 선택기 표시 또는 포커스를 선택하세요.

Standalone color picker control adjusted to blue color

확장 프로그램에서 제공하는 색상 또는 색상 형식이 없을 경우 색상 선택기는 CSS 형식의 색상으로 대체됩니다. 이제 모든 파일 형식에서 CSS 형식의 색상에 대한 인라인 색상 장식자를 시각화할 수도 있습니다. 이러한 장식자를 표시하려면 편집기: 기본 색상 장식자 (`editor.defaultColorDecorators`) 설정을 활성화하세요.

시간대 오프셋에 대한 새 스니펫 변수

새 스니펫 변수 `CURRENT_TIMEZONE_OFFSET`을 사용할 수 있습니다. 이 변수는 현재 시간대 오프셋을 `+HH:MM` 또는 `-HH:MM`(예: `-07:00`) 형식으로 반환합니다. 이는 `CURRENT_YEAR`, `CURRENT_MONTH`, `CURRENT_DAY_NAME` 등과 같은 다른 시간 관련 스니펫 변수를 보완합니다.

차이 알고리즘 개선

VS Code에서 새로운 차이 알고리즘을 계속 개선하고 이전 알고리즘을 사용 중단했습니다. 이전 알고리즘은 여전히 차이 편집기의 기본값이지만, 점차적으로 새로운 알고리즘으로 기본값을 변경하고 성능을 측정할 것입니다.

`diffEditor.diffAlgorithm`을 `advanced`(새 차이 알고리즘) 또는 `legacy`(기본값)로 설정하여 기본값을 재정의할 수 있습니다.

새 알고리즘은 많은 경우 더 나은 차이를 생성하지만 일부 문서의 경우 더 느릴 수 있습니다.

다음은 몇 가지 예시입니다 (레거시 대 고급).

  • 들여쓰기를 고려하여 줄 삽입 차이 개선

    JSON file diff result using legacy algorithm

    JSON file diff result using advanced algorithm

  • 공백 및 구분 기호를 고려하여 단어 삽입 차이 개선

    TypeScript imports word insertion diff using legacy algorithm

    TypeScript imports word insertion diff using advanced algorithm

  • 길이뿐만 아니라 청크 수도 최소화하여 보다 자연스러운 차이 생성

    TypeScript added line diff using legacy algorithm

    TypeScript added line diff using advanced algorithm

  • 단어의 일부가 상당히 변경된 경우 문자 수준 차이를 전체 단어로 확장하여 노이즈 감소

    TypeScript code change diff using legacy algorithm

    TypeScript code change diff using legacy algorithm

소스 코드를 차이로 만들거나 단순히 차이 품질을 평가하는 것은 어려운 문제이며 여전히 개선의 여지가 있습니다. 알고리즘이 더 나은 성능을 낼 수 있다고 생각되는 차이를 발견하면 차이 플레이그라운드를 사용해보고 이슈 추적기에서 피드백과 아이디어를 공유하세요!

인라인 완성 개선

이번 반복에서는 인라인 완성 기능을 재작성하고 많은 버그를 수정했습니다.

특히, 단어 완성이 이제 줄 간에 작동하며 새로운 명령 줄 완성이 있습니다. 이 기능을 지원하기 위해 다음 단어/줄을 완성하는 것은 확장 프로그램에 다시 묻지 않습니다. 인라인 완성 공급자 확장 프로그램이 다음 줄의 인라인 완성에 대해 자주 다른 제안을 보고했기 때문입니다.

확장

확장 프로그램 추천 알림 개선

확장 프로그램 추천 알림에 이제 추천 확장 프로그램의 게시자가 표시됩니다. 이를 통해 설치 전에 더 나은 결정을 내릴 수 있습니다. 다음 이미지는 단일 확장 프로그램과 여러 확장 프로그램에 대한 추천이 있는 경우의 새 알림을 보여줍니다.

Extension recommendations notification with a single recommendation Extension recommendations notification with multiple recommendations

설치된 사용 중단된 확장 프로그램 알림

사용 중단된 확장 프로그램이 설치되어 있으면 이제 알림을 통해 알려주고 대안을 제안합니다. 이는 사용 중단된 각 확장 프로그램당 한 번만 표시됩니다.

Notification about deprecated extension

소스 제어

소스 제어 입력의 빠른 수정

코드 작업 및 빠른 수정이 이제 소스 제어 메시지 상자에서 지원됩니다.

예를 들어, Code Spell Checker 확장 프로그램은 소스 제어 입력에 철자 수정 기능을 추가합니다. 확장 프로그램은 추가 수정 및 코드 작업을 제공할 수 있습니다.

GitHub 리포지토리 규칙 집합

VS Code는 이미 `git.branchProtection` 설정을 사용하여 브랜치 보호를 정의할 수 있습니다. 이번 마일스톤에서는 최근 발표된 GitHub 리포지토리 규칙 집합을 사용하여 브랜치가 보호되는지 여부를 결정하는 새로운 실험적 기능을 추가했습니다. GitHub 리포지토리 규칙 집합을 사용하는 경우 `github.branchProtection` 설정을 사용하여 이 기능을 활성화할 수 있습니다.

노트북

Notebook에 이미지 파일을 끌어다 놓아 첨부 파일 만들기

이제 이미지 파일을 Notebook Markdown 셀에 끌어다 놓아 첨부 파일을 만들 수 있습니다. 이미지를 끌어다 놓을 때 새 끌어서 놓기 선택기 컨트롤을 사용하여 이미지를 첨부 파일로 삽입을 선택하세요.

Using the drop selector in a notebook Markdown cell

이렇게 하면 이미지에 대한 링크만 추가하는 대신 이미지가 Notebook에 첨부 파일로 추가됩니다.

An image file added as an attachment

Notebook 출력 스크롤 토글

이제 명령 Notebook: 스크롤 셀 출력 토글 (⌘K Y (Windows, Linux Ctrl+K Y)) 또는 잘림 메시지의 링크를 통해 개별 셀을 스크롤 가능한 영역에 출력을 표시하도록 토글할 수 있습니다.

찾기 컨트롤 개선

Notebook 찾기 컨트롤은 이제 기본적으로 시각적으로 표시되는 키워드를 검색합니다. 사용자는 `notebook.find.scope` 설정을 통해 검색 범위(Markdown 소스, Markdown 미리 보기, 코드 소스 및 코드 출력)를 변경할 수 있습니다. 또한 일치 항목을 바꾸는 경우 Markdown 셀이 편집 가능한 셀로 변환되어 교체를 수행할 수 있습니다. 완료되면 셀이 다시 Markdown으로 변환되고 미리 보기가 복원됩니다.

언어

Markdown 파일에 동영상 끌어서 놓기

Markdown에 동영상을 삽입하고 싶으신가요? 편집기로 끌어다 놓은 다음 Shift를 누르고 있으면 파일에 끌어다 놓을 수 있습니다.

이렇게 하면 동영상 파일을 가리키는 `<video>` 태그가 삽입됩니다. VS Code 탐색기 또는 로컬 운영 체제에서 동영상을 끌어다 놓을 수 있습니다.

HTML의 JavaScript 스크립트 블록에 대한 엄격한 null 검사

이제 `js/ts.implicitProjectConfig.strictNullChecks` 설정을 사용하여 HTML 스크립트 블록의 JavaScript에 대해 엄격한 null 검사를 활성화할 수 있습니다.

Strict nulls in a script block

엄격한 null 검사가 활성화되면 호버 및 기타 IntelliSense 기능은 형식이 null일 수 있는 경우를 표시합니다. 예를 들어, `el`이 이제 `HTMLElement | null` 유형을 갖는 것을 알 수 있습니다. 이는 `document.getElementById`가 해당 ID의 요소를 찾을 수 없는 경우 null을 반환하기 때문입니다.

테스트

연속 실행은 이제 개별 테스트에 대해 활성화할 수 있습니다. 이를 위해서는 연속 실행을 지원하고 이전 반복에서 완료된 `supportsContinuousRun` API를 채택한 테스트 확장 프로그램이 필요합니다.

Continuous run button highlighted on an individual test

웹용 VS Code

Git 대용량 파일 저장소에 파일 커밋

Git 대용량 파일 저장소(LFS)를 사용하면 Git 리포지토리에서 대용량 파일을 효율적으로 저장할 수 있습니다. github.devvscode.dev는 이제 GitHub에 호스팅된 리포지토리에 Git LFS 파일을 커밋하는 것을 지원하므로 로컬에서 LFS 확장을 설치할 필요 없이 브라우저에서 쉽게 업데이트할 수 있습니다.

github.dev 및 vscode.dev의 LFS 커밋 지원은 리포지토리 루트에 Git LFS로 저장할 파일 형식을 지정하는 `.gitattributes` 파일이 이미 있는 경우 즉시 작동합니다. Git LFS에 대한 리포지토리를 처음 설정하려면 Git LFS 문서를 참조하세요.

원격 개발

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

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

Develop Anywhere with VS Code VS Code Day 세션을 확인하세요.

확장 프로그램 기여

Python

Jupyter 확장 프로그램이 더 이상 기본으로 설치되지 않음

Jupyter 확장 프로그램은 이제 기본적으로 Python 확장 프로그램과 함께 자동으로 설치되지 않습니다. 이 변경은 Jupyter 확장 프로그램이 기본으로 설치되지 않아 더 빠른 컨테이너 생성 프로세스를 원했던 피드백에 대한 응답으로 이루어졌습니다. Dev Container 사용자.

Python 확장 프로그램만 나열하는 Dev 컨테이너 정의가 있고 컨테이너에서 Jupyter Notebook 기능을 계속 사용하려면 devcontainer.json 파일에 Jupyter 확장 프로그램 ID를 추가할 수 있습니다.

  "customizations": {
    "vscode": {
      "extensions": ["ms-python.vscode-pylance", "ms-python.python", "ms-toolsai.jupyter"]
    }
  }

또는 Python 및 Jupyter 확장 프로그램과 기타 좋아하는 확장 프로그램을 포함하는 프로필을 만들 수 있습니다.

microvenv를 사용한 환경 생성 명령

Python: 환경 생성 명령이 `venv` 패키지가 설치되지 않은 Python 배포를 사용하여 호출될 때 Python 확장 프로그램은 이제 대안으로 microvenv를 사용합니다. 이는 Unix 기반 시스템에 미리 설치된 Python 환경에 장애물이 될 수 있습니다.

Microvenv는 Python 프로젝트에 대한 최소한의 가상 환경을 만드는 접근 방식을 제공하는 경량 Python 모듈입니다. 전통적인 활성화 스크립트가 포함되어 있지 않지만, Python 배포판에 `venv` 모듈이 없는 경우 격리된 환경을 만드는 데 좋은 대안을 제공합니다.

환경 생성 명령은 `microvenv`를 통해 생성된 환경에 `pip`도 설치합니다.

포맷터 확장 프로그램 추천

이전 릴리스에서는 Python 확장 프로그램과 함께 언어 서버 프로토콜(LSP)을 통해 작동하여 Python 파일에 대한 서식을 제공하는 Black Formatterautopep8에 대한 새 확장 프로그램을 발표했습니다. 이번 릴리스에서는 Python 확장 프로그램의 내장 서식 기능을 여전히 사용하는 경우 이러한 새 확장 프로그램을 설치하도록 안내하는 알림을 표시합니다.

Python 실행 작업이 이제 하위 메뉴로 이동

편집기를 마우스 오른쪽 버튼으로 클릭할 때 사용 가능한 Python 명령을 간소화하기 위해 터미널에서 Python 파일 실행Python 터미널에서 선택/줄 실행 명령은 이제 Python 실행 항목 아래의 하위 메뉴 항목입니다.

Run Python option on context menu with "Run file in terminal" and "Run selection/line" options in the submenu

f-string의 자동 변환

새로운 `"python.analysis.autoFormatStrings"` 설정을 사용하여 Pylance를 사용할 때 f-string을 자동으로 변환할 수 있습니다. 일단 활성화되면 Pylance는 따옴표 안에 `{`를 삽입할 때 문자열 시작 부분에 자동으로 `f`를 삽입합니다.

이 설정의 기본값은 현재 비활성화되어 있지만 긍정적인 피드백에 따라 곧 출시될 릴리스에서 활성화될 예정입니다. 이 기능에 대한 의견이나 제안이 있으시면 Pylance GitHub 리포지토리에 자유롭게 공유해 주세요.

경로를 포함하는 문자열에서 코드 탐색 활성화

모듈과 같은 문자열 리터럴에서 정의로 이동을 활성화하는 또 다른 새로운 실험적 설정인 `"python.analysis.gotoDefinitionInStringLiteral"`이 있습니다. 이는 웹 애플리케이션, 예를 들어 Django 앱에서 작업하고 문자열 리터럴에 정의된 모듈이나 경로로 이동하려는 경우 유용할 수 있습니다.

이전 설정을 언급한 `autoFormatStrings` 설정과 마찬가지로 이 새 설정은 현재 기본적으로 비활성화되어 있습니다. 그러나 피드백을 바탕으로 향후 릴리스에서 이 동작을 활성화할 계획입니다. 궁극적으로 이 설정을 완전히 제거할 계획입니다.

Jupyter

다시 시작 명령

Jupyter 확장 프로그램에는 이제 두 개의 새 명령이 포함되어 사용자가 커널을 다시 시작하고 셀을 직접 실행할 수 있습니다. 명령은 커널 다시 시작 및 모든 셀 실행커널 다시 시작 및 선택한 셀까지 실행이며, 각각 `jupyter.restartkernelandrunallcells` 및 `jupyter.restartkernelandrunuptoselectedcell` 명령 ID를 통해 액세스할 수 있습니다.

바쁜 원격 Jupyter 커널에 다시 연결

이전 릴리스에서는 원격 Jupyter 커널 세션에 연결할 때 Jupyter 확장 프로그램이 커널이 유휴 상태가 될 때까지 기다렸다가 연결했습니다. 커널이 장시간 실행되는 계산을 실행 중인 경우 시간이 오래 걸릴 수 있습니다. 이번 릴리스에서는 Jupyter 확장 프로그램이 커널이 바쁜 경우에도 즉시 커널에 연결합니다. 이를 통해 바쁜 커널을 중단할 수 있습니다.

플랫폼별 Jupyter 확장 프로그램

Jupyter 확장 프로그램은 이제 플랫폼별 확장 프로그램을 제공하며, 각 VSIX는 특정 플랫폼(Windows 64비트, Windows 32비트, Linux x64, Alpine x64, macOS Intel, macOS Apple Silicon 등)용으로 빌드됩니다. 개별 플랫폼의 Jupyter 확장 프로그램 다운로드 크기가 더 작아 다운로드 시간이 단축되고 디스크 공간 사용량이 줄어듭니다.

GitHub Pull Requests 및 Issues

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

  • 풀 요청에 팀 검토자를 추가할 수 있습니다.
  • 기본 브랜치 체크아웃을 수행할 수 있는 모든 위치는 이제 `git.pullBeforeCheckout` 설정을 존중합니다.
  • GitHub의 파일 수준 주석이 지원됩니다.

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

GitHub Copilot

참고: 이러한 기능은 GitHub Copilot Chat 확장 프로그램에서 사용할 수 있습니다.

채팅 편집기

GitHub Copilot Chat에 대한 첫 번째 반복에서는 사이드바에서 채팅 세션을 지원했습니다. 이제 동일한 채팅 보기를 편집기로 열 수 있습니다. 이를 통해 창 레이아웃의 원하는 위치로 채팅 세션을 사용자 지정할 수 있습니다.

대화형 세션: 편집기 열기 명령을 실행한 다음 다른 편집기와 마찬가지로 편집기 그룹 간에 이동하여 채팅 편집기를 열 수 있습니다.

A chat view as an editor

추가 코드 블록 명령

코드 블록 도구 모음에 새 파일에 삽입터미널에서 실행이라는 두 개의 새 명령이 있습니다. 이들은 기존 명령 복사커서에 삽입 옆에 있으며 Copilot에서 반환되는 코드 제안에 대해 빠르게 작업을 수행할 수 있는 추가 옵션을 제공합니다.

The codeblock toolbar showing the two new codeblock commands

코드 작업 및 인라인 채팅

편집기 채팅 세션이 이제 빠른 수정과 통합되었습니다. 물결 무늬에 대한 전구 아이콘을 선택하면 Copilot을 사용하여 수정하거나 설명하는 옵션이 표시됩니다.

코드 작업 외에도 인라인 채팅은 이제 편집기 컨텍스트 메뉴에서도 사용할 수 있습니다.

인라인 채팅 모드

이제 인라인 채팅의 다양한 모드를 변경하는 설정인 `inlineChat.editMode`가 있습니다.

옵션은 다음과 같습니다.

  • live - AI 제안 변경 사항을 편집기에 직접 적용합니다 (기본값).
  • livePreview - 변경 사항을 적용하지만 포함된 차이 편집기에 렌더링합니다.
  • preview - 분리된 포함된 차이 편집기에 변경 사항을 표시합니다.

명령 팔레트의 유사 명령

Copilot의 기능을 통해 명령 팔레트에서 유사한 명령 결과를 표시할 수 있습니다. 이를 활성화하려면 활성 Copilot 구독이 있어야 하고, 채팅 보기의 개인 미리 보기 상태여야 하며, 설정을 적용해야 합니다.

"workbench.commandPalette.experimental.useSemanticSimilarity": true

다음은 몇 가지 예시입니다.

  • "자동 저장 켜기"가 자동 저장 토글으로 해석됨

    query "turn on autosave" is correctly resolved to Toggle Auto Save

  • "함수 추가"는 확장 프로그램의 기여로 하단에 추가 결과를 포함합니다.

    query "add function" including Azure Functions Create Function command

  • 마지막으로, 결과가 아무것도 나오지 않으면 GitHub Copilot에 문의를 할 수 있으며, 이는 필터 상자에 있는 내용을 Copilot이 처리할 새 채팅에 넣습니다.

    Ask GitHub Copilot "no results" option in the Command Palette

이 영역에서 계속 반복할 예정이므로 계속 지켜봐 주세요!

미리보기 기능

TypeScript 5.1 지원

이 업데이트에는 곧 출시될 TypeScript 5.1 릴리스에 대한 지원이 포함됩니다. TypeScript 팀이 현재 작업 중인 내용에 대한 자세한 내용은 TypeScript 5.1 베타 블로그 게시물TypeScript 5.1 반복 계획을 읽어보세요. 몇 가지 편집기 도구 하이라이트

  • JSX 태그에 대한 연결 편집 지원.
  • `@param` JSDoc 태그에 대한 스니펫 완성.

TypeScript 5.1 야간 빌드를 사용하려면 TypeScript Nightly 확장 프로그램을 설치하세요.

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

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

이 기능은 TypeScript 5.1+가 필요하며 HTML에서 이름 바꾸기가 작동하는 방식과 일치합니다.

이 동작은 `javascript.preferences.renameMatchingJsxTags` 및 `typescript.preferences.renameMatchingJsxTags`를 사용하여 비활성화할 수 있습니다.

확장 프로그램 작성

작업 영역 편집기에서 이제 DataTransferFile에서 파일을 직접 생성할 수 있습니다.

가장 중요한 편집기에 끌어다 놓기 API 사용법 중 하나는 끌어다 놓은 파일을 작업 영역에 쓰는 것입니다. 그러나 이전 VS Code 릴리스에서는 대용량 파일의 경우 상당히 느릴 수 있었습니다. 이는 파일 내용이 두 번 프로세스 간에 복사되기 때문입니다. 먼저 렌더러에서 확장 프로그램 호스트로 파일 내용을 읽은 다음, 확장 프로그램 호스트에서 렌더러로 다시 파일 내용을 쓰기 때문입니다.

class CreateFileDropProvider implements vscode.DocumentDropEditProvider {
  async provideDocumentDropEdits(
    _document: vscode.TextDocument,
    _position: vscode.Position,
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): Promise<vscode.DocumentDropEdit | undefined> {
    const pngFile = dataTransfer.get('image/png')?.asFile();
    if (!pngFile) {
      return;
    }

    // Read file
    // This results in the entire file contents being copied over to the extension host.
    const contents = await pngFile.data();

    // Now create a workspace edit that writes the file into the workspace
    // This results in the same file contents from above being copied back again.
    const additionalEdit = new vscode.WorkspaceEdit();
    const path = vscode.Uri.joinPath(
      vscode.workspace.workspaceFolders![0].uri,
      'image.png'
    );
    additionalEdit.createFile(path, { contents });

    const edit = new vscode.DocumentDropEdit(path.fsPath);
    edit.additionalEdit = additionalEdit;
    return edit;
  }
}

이제 `WorkspaceEdit.createFile`에 `DataTransferFile`을 직접 전달하여 추가 복사를 방지할 수 있습니다.

additionalEdit.createFile(path, { contents: pngFile });

이는 특히 대용량 파일을 다룰 때 성능을 크게 향상시킬 것입니다.

resolveCodeAction에서 코드 작업 명령 해결

CodeActionProvider는 이제 `resolveCodeAction`에서 CodeAction의 명령을 지연하여 확인할 수 있습니다. 이전에는 코드 작업에 대한 편집만 지연하여 확인할 수 있었습니다.

명령을 계산하는 데 비용이 많이 드는 경우, CodeActionProvider는 코드 작업이 적용될 때까지 이 작업을 연기할 수 있습니다.

editor/lineNumber/context menu

editor/lineNumber/context 메뉴를 최종 확정했습니다. 이를 통해 확장 프로그램 작성자는 편집기 줄 번호 및 글리프 여백에 고정된 컨텍스트 메뉴에 작업을 기여할 수 있습니다. 이 메뉴에 기여한 작업은 명령 인수로 줄 번호를 받고 when 절에서 `editorLineNumber` 컨텍스트 키를 참조할 수 있습니다.

인증 API 개선

인증 세션 환경 설정이 이제 작업 영역을 인식합니다.

하나의 계정에 여러 개 로그인할 수 있는 인증 공급자(예: Microsoft)의 경우, createIfNone: truevscode.authentication.getSession을 호출할 때 사용할 계정을 선택하라는 메시지가 표시됩니다.

이전 동작

이 환경 설정은 ClearSessionPreference 플래그와 함께 vscode.authentication.getSession이 호출될 때까지 기억됩니다.

새로운 동작

이 환경 설정은 해당 작업 영역에서 ClearSessionPreference 플래그와 함께 vscode.authentication.getSession이 호출될 때까지 작업 영역별로 기억됩니다.

이 동작은 확장 프로그램이 다른 작업 영역에 대해 다른 계정을 사용하고 해당 환경 설정을 기억할 수 있도록 하기 위해 도입되었습니다.

참고: 환경 설정은 확장 프로그램별입니다. 따라서 한 확장 프로그램이 vscode.authentication.getSession을 호출해도 다른 확장 프로그램이 vscode.authentication.getSession을 호출하는 경우 환경 설정에 영향을 주지 않습니다.

데스크톱의 Microsoft Sovereign Cloud 지원

이번 반복에서는 핵심 제품에 새로운 인증 공급자: Microsoft Sovereign Cloud를 도입했습니다. 이 공급자는 Azure US Government, Azure China 등과 같은 Microsoft Cloud for Sovereignty에 사용자를 인증하기 위한 것입니다. 내부적으로는 Microsoft 인증 공급자와 동일하게 작동하지만 URL만 다릅니다. 이 인증 공급자를 사용하려면 microsoft-sovereign-cloud.endpoint 값을 설정하도록 사용자에게 안내할 수 있습니다. 이 값은 몇 가지 기본값이 있지만 사용자 지정 Sovereign Cloud URL도 지원합니다.

대부분의 사용자는 Sovereign Cloud 계정이 없다는 점을 명심하세요. Sovereign Cloud를 지원하려면 사용자가 Sovereign Cloud를 통해 로그인할 수 있도록 해야 하지만, 사용자를 혼동시키지 않기 위해 메인 워크플로의 일부로 포함하지 않는 것이 좋습니다.

제안된 API

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

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

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

여러 범위 서식 지정

DocumentRangeFormattingEditProvider API에는 한 번에 여러 범위를 서식 지정하는 것을 지원하는 선택적 제안 함수가 있습니다. 이 API를 채택함으로써 공급자는 언어 서비스에 대한 요청이 한 번만 필요하므로 수정된 범위 서식 지정 흐름이 개선됩니다.

문서 끌어다 놓기 메타데이터

이 새 제안은 기존 편집기에 끌어다 놓기 API를 보강하여 새 끌어다 놓기 선택기를 지원합니다. 공급자는 이를 사용하여 더 나은 편집기에 끌어다 놓기 환경을 제공할 수 있습니다.

이 제안의 첫 번째 부분은 DocumentDropEditlabel 속성을 추가합니다. 이 사람이 읽을 수 있는 레이블은 편집 내용을 설명하며 끌어다 놓기 선택기 UI에 표시됩니다.

Labels shown in the drop selector

두 번째 부분은 registerDocumentDropEditProvider에 추가 metadata 인수를 추가합니다. 이 메타데이터 인수는 공급자를 식별하고 VS Code에 적용되는 콘텐츠 유형을 알려줍니다.

vscode.languages.registerDocumentDropEditProvider(
  'markdown',
  new InsertBase64ImageProvider(),
  {
    // Unique id that identities this provider
    id: 'insertBase64Image',

    // Array of mime types, such as `image/png` or `text/plain`, that this provider supports.
    // You can also use wildcards, such as `image/*` which matches any image content that is dropped.
    dropMimeTypes: ['image/*']
  }
);

dropMimeTypes 배열은 공급자가 관련 끌어다 놓기 콘텐츠에 대해서만 호출되므로 성능을 향상시키는 데 도움이 될 수 있습니다.

엔지니어링

Electron 22 업데이트

이번 마일스톤에서는 확장 프로그램 호스트에 대한 사용자 지정 할당자 사용에 대한 실험을 완료했으며 Electron 22를 VS Code 데스크톱에 번들로 제공할 준비가 되었습니다. Insider 빌드에서 자체 호스팅하고 초기 피드백을 제공해 주신 모든 분들께 감사드립니다. 이 업데이트에는 Chromium 108.0.5359.215 및 Node.js 16.17.1이 포함됩니다.

VS Code Day

VS Code Day의 모든 하이라이트를 VS Code Day 2023 YouTube 재생 목록에서 확인하세요. 해당 목록에는 GitHub Copilot, Data Science, TypeScript와 같은 주제에 대한 세션이 포함되어 있으며, Erich Gamma와 Kai Maetzel이 VS Code 팀이 VS Code를 구축하고 출시하는 방법을 설명하는 기조연설도 있습니다.

감사합니다

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

이슈 추적

이슈 추적에 대한 기여

풀 리퀘스트

vscode 기여

vscode-js-debug 기여

vscode-json-languageservice 기여

  • @zardoy (Vitaly)
    • [completions] Default value와 같은 세부 정보 항상 표시 PR #183
    • [completion] uniqueItems: true일 때 중복 제안하지 않음 PR #184

vscode-pull-request-github 기여

monaco-editor 기여

devcontainers/cli에 대한 기여

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