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

2019년 7월 (버전 1.37)

업데이트 1.37.1: 이 업데이트는 이슈를 수정합니다.

다운로드: Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap


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

이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com업데이트로 이동하십시오.
또한 개발자 옹호자인 Brian Clark의 1.37 릴리스 하이라이트 동영상을 확인할 수 있습니다.

Insider: 가능한 한 빨리 새로운 기능을 보려면? 야간 빌드인 Insider를 다운로드하고 최신 업데이트를 즉시 사용해 볼 수 있습니다. 최신 Visual Studio Code 뉴스, 업데이트 및 콘텐츠를 보려면 Twitter @code를 팔로우하세요!

워크벤치

새로운 제품 아이콘

제품 아이콘을 모두 동일한 스타일, 색상, 크기로 업데이트했습니다. 다양한 반복 과정을 거쳤으며 커뮤니티에서 각 단계마다 피드백을 제공하는 데 도움을 주었습니다.

참고: Octicons 사용은 포함되지 않았습니다. 해당 아이콘은 상태 표시줄과 빠른 선택에 표시됩니다.

VS Code product icons

문자열 배열에 대한 설정 편집기 지원

설정 편집기에서 문자열 배열 설정을 편집할 수 있게 되었습니다. 항목 추가 버튼을 누르면 새 문자열을 추가하는 입력란이 나타납니다.

Settings UI for array-of-string settings

확장 프로그램 작성자는 typeitems 키를 포함하는 구성 기여를 통해 이 지원을 활성화할 수 있습니다.

{
  "type": "array",
  "items": {
    "type": "string"
  }
}

설정 파일에서 경고 제거

이제 settings.json 파일에서 알 수 없거나 지원되지 않는 설정에 대한 경고가 표시되지 않습니다. 대신, 비활성 설정은 사용되지 않는 소스 코드처럼 흐리게 표시되며, 그 이유를 설명하는 도구 설명이 표시됩니다. 또한, 현재 비활성화된 확장 프로그램의 설정에 대한 경고도 표시되지 않습니다.

Faded unused settings

탐색기에서 검색 결과 표시

검색 보기의 파일 컨텍스트 메뉴에 탐색기에서 표시 명령이 추가되어 파일 탐색기에서 해당 파일로 이동할 수 있습니다.

Reveal in Explorer command in search result

검색 정규 표현식 기능

1.29 릴리스에서 search.usePCRE2 설정을 추가하여 검색에 PCRE2 정규 표현식 엔진을 사용하도록 했습니다. 이를 통해 백레퍼런스탐색 단언과 같은 고급 정규 표현식 기능을 사용할 수 있었습니다. ripgrep의 상위 작업 덕분에 이제 특별한 설정을 활성화하지 않고도 이러한 기능을 사용할 수 있습니다. ripgrep은 정규 표현식이 Rust 정규 표현식 엔진에서 지원되지 않는 기능을 사용하는 경우 자동으로 PCRE2 엔진으로 대체하며, search.usePCRE2는 이제 사용되지 않습니다. 상기시켜드리자면, 열려 있는 편집기는 여전히 편집기의 JavaScript 기반 검색을 사용하므로 VS Code는 JavaScript에서 유효한 정규 표현식만 지원합니다.

NPM 스크립트 탐색기가 기본적으로 표시됨

이전에는 npm.enableScriptExplorer 설정을 활성화해야 NPM 스크립트 탐색기가 표시되었으며, 이를 찾기 어려웠습니다. 이제 워크스페이스 루트에 package.json 파일이 있는 경우 NPM 스크립트 탐색기가 파일 탐색기에서 축소된 상태로 표시됩니다.

NPM Scripts Explorer collapsed

워크스페이스 루트에 package.json 파일이 없는 경우에도 설정을 사용하여 NPM 스크립트 탐색기를 활성화할 수 있습니다. 탐색기를 숨기려면 해당 제목을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 숨기기를 선택하십시오.

focusedView 컨텍스트 키

새로운 키 바인딩 when 절 컨텍스트 키인 focusedView를 사용하여 특정 보기가 포커스되었을 때 명령을 표시하거나 활성화할 수 있습니다.

"when": "focusedView == nodeDependencies"

접근성 개선 사항

워크벤치 전반에 걸쳐 접근성 문제를 수정했습니다. 수정된 모든 문제 목록은 GitHub에서 'accessibility' 레이블을 사용하여 확인할 수 있습니다.

트리 뷰에 새로운 트리 위젯 채택

트리 뷰를 제공하는 확장 프로그램은 이제 새로운 트리 위젯 환경을 사용하게 됩니다. 트리 위젯은 더 나은 성능과 향상된 키보드 탐색, 필터링, 사용자 정의 들여쓰기, 가로 스크롤 등을 제공합니다. 좋아하는 확장 프로그램에 사용자 정의 트리 뷰가 있다면, VS Code 기본 탐색기에 추가되었던 것과 동일한 UX 개선 사항을 보게 될 것입니다.

편집기

선택 영역의 공백 문자 표시

editor.renderWhitespace 설정이 이제 selection 옵션을 지원합니다. 이 옵션을 설정하면 선택한 텍스트에 대해서만 공백 문자가 표시됩니다.

Whitespace rendered on selection

전체 편집기를 채우지 않고도 공백 문자를 빠르게 확인할 수 있어 편리합니다.

미니맵 검색 결과 가시성 개선

이전 릴리스에서 미니맵(코드 개요)에 검색 장식이 도입되었습니다. 이 장식은 보기 어려웠기 때문에 이번 업데이트에서는 가시성을 높이는 데 주력했습니다. 이제 미니맵에서 전체 줄이 낮은 불투명도로 강조 표시되고, 실제 일치는 높은 불투명도로 표시됩니다.

Minimap search results

새로운 minimap.findMatchHighlight 테마 색상을 사용하여 장식 색상을 변경할 수도 있습니다.

찾기 및 바꾸기에서 대소문자 유지

이제 편집기의 찾기 위젯에서 바꾸기를 수행할 때 대소문자를 유지할 수 있습니다. 편집기의 바꾸기 입력란에 있는 대소문자 유지 옵션(AB 버튼)을 켜면 기능이 활성화됩니다.

Preserve Case button

현재 VS Code는 전체 대문자, 전체 소문자, 제목 대문자만 지원합니다.

Preserve case example

찾기 위젯의 단추 토글 활성 상태

찾기 위젯의 단추 토글 활성 상태를 채워진 배경으로 업데이트하여, 활성화된 토글에 포커스되었는지 쉽게 알 수 있습니다. 이는 검색 보기, 찾기 및 바꾸기, 터미널 찾기에서 나타납니다.

이 업데이트를 통해 활성화된 옵션의 배경색을 제어하는 새로운 테마 색상인 inputOption.activeBackground를 도입했습니다. 이 색상은 기본적으로 테마와 더 잘 작동하도록 focusBorder를 재사용합니다. 또한 inputOption.activeBorder의 기본값을 투명으로 설정하여 테두리가 포커스에만 사용되도록 했습니다.

Button toggle active state

정보 색상 업데이트

경고 색상 통합에 따라 editorInfoForegroundeditorInfoBorder를 다른 정보 진단 색상과 일치하도록 업데이트했습니다. 편집기 미리 보기 오류 보기 및 편집기 깜박임에서 이 업데이트된 색상을 볼 수 있습니다.

Info display colors

통합 터미널

검색 UX 개선

이전에는 터미널 내 검색이 터미널 뷰포트 상단에서 시작하여 아래로 검색되었습니다. 바닥에 도달하면 위로 다시 올라갔습니다. 새로운 동작은 다른 많은 터미널 에뮬레이터와 일치하며 버퍼 하단에서 위로 검색을 시작하여 훨씬 덜 혼란스러운 환경을 제공합니다.

Terminal search now searches upwards by default

터미널 접근성 개선

터미널에 이제 화면 판독기가 사용될 때 줄 탐색 모드가 포함되어 을 통해 편리하게 줄을 탐색할 수 있습니다. 으로 모드를 종료할 수 있습니다.

이들은 키 바인딩을 사용자 정의하려는 경우 새로운 명령입니다.

workbench.action.terminal.navigationModeExit
workbench.action.terminal.navigationModeFocusNext
workbench.action.terminal.navigationModeFocusPrevious

기타 접근성 개선도 이루어졌습니다.

  • 빈 줄에 대한 줄 바꿈 없는 공백 문자가 명시적인 문자열 대신 사용되어 화면 판독기가 올바르게 발표할 수 있게 되었습니다.
  • 이제 화면 판독기가 입력되고 제거된 문자를 발표합니다. 이 기능이 작동하지 않는 경우도 있지만 대부분의 경우 포함됩니다.

설정에서 변수 확인

변수를 다음 설정에서 사용할 수 있습니다.

terminal.integrated.cwd
terminal.integrated.shell.<platform>
terminal.integrated.shellArgs.<platform>

예를 들어, 현재 파일의 폴더에서 터미널을 열기 위해 더 이상 확장이 필요하지 않습니다. 이 설정만 추가하면 됩니다.

"terminal.integrated.cwd": "${fileDirname}"

오류 보고 및 진단 개선

이전에는 터미널이 잘못된 구성으로 시작될 때 프로세스가 오류 코드로 종료되었다는 것만 표시되었습니다. 이제 여러 일반적인 시나리오에 대한 해결 방법을 안내하는 더 나은 오류 메시지가 제공됩니다.

Using an invalid shell setting will tell you the shell is invalid

언어

SCSS @import 탐색 개선

VS Code는 이전에는 SCSS 가져오기를 정적으로 확인했습니다. 예를 들어, @import './foo'_foo.scss로 확인되었습니다. 그러나 SCSS는 가져오기를 확인하는 방식이 더 유연하여 ./foo가 다음 다섯 가지 위치 중 하나로 확인될 수 있습니다.

  • foo.scss
  • _foo.scss
  • foo/index.scss
  • foo/_index.scss
  • foo.css

VS Code는 이제 확인된 파일이 디스크에 존재하는 경우 @import './foo'를 이러한 위치 중 하나로 확인합니다. 링크가 /로 끝나면 /index.scss 또는 /_index.scss만 확인됩니다. 링크가 .css 또는 .scss와 같은 접미사로 끝나면 VS Code는 대체 파일 위치를 시도하지 않습니다.

CSS 속성 값 완성 개선

CSS 완성 기능이 이제 덜 사용되는 값을 포함하여 추가 754개의 CSS 속성 값에 대한 자세한 설명서를 제공합니다.

CSS property value completion documentation

JavaScript 및 TypeScript의 구문 전용 기능 더 빠르게 사용

지난 릴리스에서 VS Code의 JavaScript 및 TypeScript 언어 기능을 지원하는 TypeScript 서버를 별도의 구문 및 의미론적 서버로 분리하는 실험적 설정을 추가했습니다.

VS Code 1.37에서는 분할 서버가 이제 기본적으로 활성화됩니다. 이는 대규모 JavaScript 및 TypeScript 프로젝트의 경우 코드 폴딩 또는 문서 개요와 같은 구문 기반 작업이 더 빠르게 제공되어야 함을 의미합니다.

작업

TypeScript 감지된 작업 경고

지난 릴리스에서 TypeScript 작업 자동 감지는 tsconfig 경로의 OS별 경로 구분 기호 대신 크로스 플랫폼에 친화적인 /를 사용하도록 변경되었습니다. VS Code는 이제 tsconfig 경로에 \\가 있으면 경고를 표시합니다.

{
  "type": "typescript",
  "tsconfig": "src\\tsconfig.json", // This will cause a warning to show. It should be "tsconfig": "src/tsconfig.json"
  "option": "watch",
  "problemMatcher": [
    "$tsc-watch"
  ]
}

작업 및 디버그 구성에 대한 ${relativeFileDirname} 변수

새로운 변수 ${relativeFileDirname}은 현재 열려 있는 파일의 디렉토리에 대한 작업 영역 폴더 상대 경로로 확인됩니다. 이 변수는 작업 및 디버그 구성(tasks.jsonlaunch.json)에서 사용할 수 있습니다.

resolveTask 지원

작업 제공자는 이제 resolveTask를 구현하여 작업 제공 확장 프로그램의 오버헤드를 줄일 수 있습니다. resolveTaskprovideTasks 호출 후 호출됩니다. 따라서 확장 프로그램에 provideTasks 및 자동 감지를 비활성화하는 설정(내장 gulp 확장 프로그램과 같은)이 있지만 사용자가 tasks.json에서 해당 작업 중 하나를 참조하는 경우 resolveTask가 호출되어 확장 프로그램이 해당 단일 작업을 반환할 수 있습니다.

확장 프로그램 기여

원격 개발 (미리 보기)

컨테이너, 원격 머신 또는 Linux용 Windows 하위 시스템(WSL)을 전체 기능을 갖춘 개발 환경으로 사용할 수 있게 해주는 원격 개발 확장 프로그램에 대한 작업이 계속되었습니다. 확장 프로그램 기능 및 버그 수정에 대한 자세한 내용은 원격 개발 릴리스 노트에서 확인할 수 있습니다.

최근 두 개의 블로그 게시물에서 다음을 설명합니다.

Java 스마트 선택 지원

Microsoft Java 확장 프로그램은 이제 Microsoft Java 확장 프로그램에서 스마트 의미론적 선택을 지원합니다. 소스 코드의 현재 위치에 대한 의미론적 정보를 기반으로 선택 범위를 확장하거나 축소할 수 있습니다.

  • 선택을 확장하려면 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)을 사용하세요.
  • 선택을 축소하려면 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)을 사용하세요.

확장 프로그램 작성

vscode.workspace.fs

확장 프로그램이 파일과 폴더를 읽고, 쓰고, 관리할 수 있는 새로운 API가 있습니다. 이는 Node.js의 fs 파일 시스템 모듈을 대체하는 것이며, 더 중요하게는 SSH 또는 WSL 원격 파일 시스템과 같은 기여된 파일 시스템에서 파일에 액세스할 수 있습니다.

아래 스니펫은 파일에 쓰는 방법을 보여줍니다. 더 많은 사용 예시는 fsconsumer-sample에서 찾을 수 있습니다.

const writeStr = '1€ is 1.12$ is 0.9£';
const writeBytes = Buffer.from(writeStr, 'utf8');

await vscode.workspace.fs.writeFile(someUri, writeBytes);

실행 유도: 현재 Node.js의 fs 모듈을 사용하는 확장 프로그램이 있다면, 새로운 vscode.workspace.fs API로 마이그레이션하는 것을 고려하십시오.

DiagnosticsTag.Deprecated

진단 태그를 사용하면 확장 프로그램 작성자가 편집기 내에서 진단의 표현을 풍부하게 할 수 있습니다. 이번 릴리스에서는 DiagnosticTag.Deprecated가 추가되어 편집기에서 취소선으로 렌더링됩니다.

Strikeout Deprecated decoration

위 이미지의 진단은 아래 표시된 validate 함수에 의해 생성됩니다. diag.tags = [vscode.DiagnosticTag.Deprecated]; 줄이 사용 중단 태그를 추가합니다.

let diagnostics = vscode.languages.createDiagnosticCollection('Sample Errors');
let validate = (editor: vscode.TextEditor | undefined) => {
  if (!editor) {
    return;
  }
  let result: vscode.Diagnostic[] = [];
  for (let line = 0; line < editor.document.lineCount; line++) {
    let pos = 0;
    while ((pos = editor.document.lineAt(line).text.indexOf('guys', pos)) >= 0) {
      let diag = new vscode.Diagnostic(
        new vscode.Range(line, pos, line, pos + 'guys'.length),
        'This is deprecated, use "folks", "people", or "you all" instead.'
      );
      diag.severity = vscode.DiagnosticSeverity.Warning;
      diag.tags = [vscode.DiagnosticTag.Deprecated];
      result.push(diag);
      pos += 'guys'.length;
    }
  }
  diagnostics.set(editor.document.uri, result);
};

vscode.workspace.workspaceFile

작업 영역 파일의 위치를 반환하는 새로운 작업 영역 속성 workspace.workspaceFile이 있습니다. 예: file:///Users/name/Development/myProject.code-workspace 또는 아직 저장되지 않은 작업 영역의 경우 untitled:1555503116870.

열려 있는 워크스페이스에 따라 값은 다음과 같습니다.

  • 작업 영역이 없거나 단일 폴더가 열려 있는 경우 undefined.
  • 작업 영역 파일의 경로는 Uri로 표시됩니다.

작업 영역이 untitled인 경우 반환된 URI는 untitled: 스키마를 사용합니다.

작업 영역 파일 위치의 한 가지 용도는 vscode.openFolder 명령을 호출하여 작업 영역이 닫힌 후 다시 여는 것입니다.

vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);

참고: workspace.workspaceFile 위치를 사용하여 구성 데이터를 파일에 직접 쓰는 것은 권장되지 않습니다. 대신 workspace.getConfiguration().update() 메서드를 사용하세요. 이 메서드는 단일 폴더가 열려 있거나 untitled 또는 저장된 작업 영역 모두에서 작동합니다.

vscode.env.shell

제안된 vscode.env.shell API가 안정화되었습니다. 터미널의 기본 쉘을 가져오기 위해 terminal.integrated.shell.<platform> 설정을 사용하는 대신 이를 사용해야 합니다.

const shell = vscode.env.shell;
if (shell.search(/(powershell|pwsh)/i) !== -1) {
  // Do something special that PowerShell needs
}

when 절에서의 OR 지원

이제 when 절이 필요한 다양한 기여 지점에서 논리적 OR(||)를 사용할 수 있습니다.

예를 들어, 메뉴 기여를 추가할 때

"contributes": {
  "menus": {
    "editor/title": [{
      "command": "showPreviewToSide",
      "when": "editorLangId == markdown || editorLangId == html",
      "group": "navigation"
    }]
  }
}

AND && 연산자는 OR || 연산자보다 우선 순위가 높습니다.

활성 입력 옵션에 대한 새 테마 색상

새로운 색상인 inputOption.activeBackground를 사용하면 입력 필드의 활성화된 옵션 배경색을 제어할 수 있습니다. 이 색상은 기본적으로 테마와 더 잘 작동하도록 focusBorder를 재사용합니다. 또한 inputOption.activeBorder의 기본값을 투명으로 설정하여 테두리가 포커스에만 사용되도록 했습니다.

확장 프로그램 통합 테스트 실행 전에 확장 프로그램 설치

vscode-test@1.1.0을 사용하면 확장 프로그램 작성자가 다운로드된 VS Code 복사본에 대한 CLI 경로를 해결하고 확장 프로그램 관리에 해당 경로를 사용할 수 있습니다.

예를 들어,

const cp = require('child_process');
const { downloadAndUnzipVSCode, resolveCliPathFromExecutablePath } = require('vscode-test');

(async () => {
  const vscodeExecutablePath = await downloadAndUnzipVSCode('1.36.0');
  const cliPath = resolveCliPathFromExecutablePath(vscodeExecutablePath);

  cp.spawnSync(cliPath, ['--install-extension', '<EXTENSION-ID-OR-PATH-TO-VSIX>'], {
    encoding: 'utf-8',
    stdio: 'inherit'
  });
})();

업데이트된 확장 프로그램 테스트 설명서에서 자세히 읽어보세요.

Linux에서 확장 프로그램 통합 테스트 실행을 위한 Travis CI 스크립트 업데이트

확장 프로그램 통합 테스트에 권장되는 구성(아래 참조)은 최신 Travis CI Linux 환경에서 작동하지 않을 수 있습니다.

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0;
  sh -e /etc/init.d/xvfb start;
  sleep 3;
fi

이제 대신 아래 Xvfb 스크립트를 사용할 수 있습니다.

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export DISPLAY=':99.0'
  /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
fi

업데이트된 지속적 통합 설명서에서 자세히 읽어보세요.

제안된 확장 API

각 마일스톤에는 새로운 제안 API가 포함되며 확장 작성자는 이를 시험해 볼 수 있습니다. 언제나처럼 여러분의 피드백을 기다립니다. 제안된 API를 시험해 보려면 다음 단계를 따르세요.

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

제안된 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환되지 않는 변경이 발생할 수 있으며 기존 확장에 문제가 발생하는 것을 원하지 않습니다.

확장 프로그램 터미널

지난해 도입된 제안된 TerminalRenderer API는 대폭 변경되었으며 "확장 프로그램 터미널"을 위해 사용 중단되었습니다. 새 API는 터미널이 실제로 작동하는 방식과 훨씬 더 일치하며, 확장 프로그램은 이제 *nix 스타일 pty와 유사한 Pseudoterminal 객체를 구현합니다.

현재 제안은 다음과 같습니다.

export namespace window {
  export function createTerminal(options: ExtensionTerminalOptions): Terminal;
}

export interface ExtensionTerminalOptions {
  name: string;
  pty: Pseudoterminal;
}

interface Pseudoterminal {
  onDidWrite: Event<string>;
  onDidOverrideDimensions?: Event<TerminalDimensions | undefined>;
  onDidClose?: Event<void>;
  open(initialDimensions: TerminalDimensions | undefined): void;
  close(): void;
  handleInput?(data: string): void;
  setDimensions?(dimensions: TerminalDimensions): void;
}

주요 변경 사항은 다음과 같습니다.

  • 확장 프로그램 터미널은 이제 일반 터미널과 거의 동일한 방식으로 처리되며, 다른 옵션 객체를 사용합니다. 또한 TerminalRenderer.terminal을 통해 터미널 객체에 액세스하는 혼란스러움을 제거합니다.
  • OS 프로세스의 개념과 종료 코드를 반환해야 하는 필요성이 사라졌습니다. Pseudoterminal은 단순히 터미널을 닫을 수 있으며 모든 오류 표시/알림은 확장 프로그램에서 관리됩니다.
  • Pseudoterminal.open은 초기 치수가 사용 가능한 경우(터미널 패널이 이전에 표시된 경우) 호출됩니다.

간단한 터미널이 입력을 다시 에코하는 방법에 대한 간단한 예시는 다음과 같습니다.

const writeEmitter = new vscode.EventEmitter<string>();
let line = '';
const pty = {
  onDidWrite: writeEmitter.event,
  open: () => writeEmitter.fire('Type and press enter to echo the text\r\n\r\n'),
  close: () => {},
  handleInput: (data: string) => {
    if (data === '\r') {
      writeEmitter.fire(`\r\necho: "${line}"\r\n\n`);
      line = '';
    } else {
      line += data;
      writeEmitter.fire(data);
    }
  }
};
const terminal = vscode.window.createTerminal({ name: `My Extension REPL`, pty });
terminal.show();

이 기능을 안정화하고 사용 중단된 터미널 렌더러를 비교적 빠르게 제거할 수 있기를 바랍니다. v1.38과 v1.39 사이에 가능성이 있습니다.

vscode.CustomExecution2

이 API는 vscode.CustomExecution의 진화입니다. 새롭고 개선된 vscode.Pseudoterminal을 사용하여 작업 제공자가 확장 프로그램 내의 코드가 단순히 스크립트나 프로세스를 실행하는 대신 터미널을 완전히 제어할 수 있는 작업을 만들 수 있도록 합니다.

export class CustomExecution2 {
  /**
   * @param process The [Pseudoterminal](#_Pseudoterminal) to be used by the task to display output.
   * @param callback The callback that will be called when the task is started by a user.
   */
  constructor(callback: (thisArg?: any) => Thenable<Pseudoterminal>);

  /**
   * The callback used to execute the task. Cancellation should be handled using
   * [Pseudoterminal.close](#_Pseudoterminal.close). When the task is complete fire
   * [Pseudoterminal.onDidClose](#_Pseudoterminal.onDidClose).
   */
  callback: (thisArg?: any) => Thenable<Pseudoterminal>;
}

vscode.commands.onDidExecuteCommand

명령이 실행될 때마다 발생하는 새 이벤트가 있으며, 이벤트의 페이로드에는 명령과 인수가 식별됩니다.

export interface CommandExecutionEvent {
  command: string;
  arguments: any[];
}
export namespace commands {
  /**
   * An event that is emitted when a [command](#_Command) is executed.
   */
  export const onDidExecuteCommand: Event<CommandExecutionEvent>;
}

Webview.toWebviewResource 및 Webview.cspSource

이전 제안된 Webview.resourceRoot API는 이전 제안된 Webview.resourceRoot API를 재작업했습니다.

이제 웹뷰에는 두 개의 제안된 속성이 있습니다.

  • Webview.toWebviewResource - 로컬 파일 시스템의 URI를 웹뷰 내에서 사용할 수 있는 URI로 변환합니다.

    데스크톱 VS Code의 경우 file: URI를 vscode-resource: URI로 변환합니다.

  • Webview.cspSource - 웹뷰 리소스의 콘텐츠 보안 정책 소스입니다.

    데스크톱 VS Code의 경우 문자열 vscode-resource:가 됩니다.

const panel = vscode.window.createWebviewPanel(
  CatCodingPanel.viewType,
  'Cat Coding',
  vscode.ViewColumn.One,
  {
    // Restrict the webview to only loading local content from our extension's `media` directory.
    localResourceRoots: [vscode.Uri.file(path.join(extensionPath, 'media'))]
  }
);

const imagePath = vscode.Uri.file(path.join(extensionPath, 'media'));

panel.html = `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${
      panel.webview.cspSource
    } https:;">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cat Coding</title>
</head>
<body>
    <img src="${panel.webview.toWebviewResource(imagePath)}/cat.gif" width="300" />
</body>
</html>`;

엔지니어링

VS Code 코드베이스에서 suppressImplicitAnyIndexErrors 제거

VS Code 소스에 대한 엄격한 null 검사를 활성화했을 때 TypeScript 컴파일러에서 "suppressImplicitAnyIndexErrors": true도 활성화했습니다. 이 설정은 값에 인덱스 접근 서명이 명시적으로 없더라도 해당 값에 대한 대괄호 접근을 허용합니다.

이는 TypeScript가 잡을 수 있었던 오류를 쉽게 숨길 수 있기 때문에 문제가 됩니다.

const map = new Map()
map.set('property', true);

...

if (map['property']) { // This is not an TS error but it does not do what you want!
    doImportantStuff();
}

이번 반복에서는 suppressImplicitAnyIndexErrors의 임시 해결책을 제거하고 이를 억제하던 약 250개의 오류를 수정했습니다. 가장 일반적인 두 가지 수정은 명시적인 인덱스 서명을 추가하거나 객체 리터럴을 사용하는 대신 Map 유형을 사용하여 맵을 저장하는 것으로 전환하는 것이었습니다.

그리드 기반 워크벤치 레이아웃 진행 상황

이번 마일스톤에서는 몇 마일스톤 전에 시작된 워크벤치 그리드 기반 레이아웃 노력을 이어갔습니다. 초기 솔루션이 완료되면 워크벤치의 새 버전은 유사하게 작동하지만, 새로운 레이아웃 옵션과 기능을 추가하는 데 더 유연해질 것입니다.

테스트 중인 한 가지 새로운 동작은 터미널을 완전히 위로 끌어 편집기를 완전히 숨기는 기능입니다. 현재 레이아웃은 여전히 플래그 workbench.useExperimentalGridLayout 뒤에 있습니다. 지난 마일스톤에 Insiders에서 기본적으로 활성화했으며, 다음 마일스톤에도 계속될 것입니다.

iframe 기반 웹뷰 지속적인 탐색

VS Code 웹뷰를 호스팅하기 위해 일반 iframe을 사용하는 탐색을 계속했습니다. 이를 위해 이제 모든 iframe 기반 웹뷰를 고유한 출처에서 로드하는 것을 지원합니다. 이렇게 하면 여러 확장 프로그램의 웹뷰가 서로 영향을 미치지 않도록 보장됩니다.

이제 다음 설정을 통해 데스크톱 VS Code에서 iframe 기반 웹뷰를 활성화할 수도 있습니다: "webview.experimental.useExternalEndpoint": true. iframe 기반 웹뷰를 사용하려면 현재 인터넷 연결이 필요합니다. iframe 기반 웹뷰는 아직 실험적이므로, 웹뷰 확장 프로그램 작성자에게 iframe 기반 웹뷰를 사용하여 실행할 때 확장 프로그램의 작동하지 않는 부분에 대한 피드백을 주시면 감사하겠습니다.

새로운 문서

원격 개발 튜토리얼

원격 개발 확장 프로그램을 사용하여 Visual Studio Code를 실행하는 과정을 안내하는 새로운 소개 튜토리얼이 있습니다.

  • SSH를 통한 원격 - SSH를 통해 Visual Studio Code로 원격 및 가상 머신에 연결합니다.
  • WSL 작업 - Linux용 Windows 하위 시스템에서 Visual Studio Code를 실행합니다.
  • 개발 컨테이너 - Docker 컨테이너에서 Visual Studio Code를 실행합니다.

주요 수정 사항

  • 422: 최대화된 창 복원 시 창 크기 유지
  • 70371: 대규모 파일에서 Emmet 탭 완성 속도가 느림
  • 76922: 사이드바 보기의 순서가 모든 창에 걸쳐 유지됨
  • 76989: 확장 프로그램 디버깅에 대해 확장 프로그램 비활성화가 작동하지 않음
  • 77110: 디버그 통합 터미널 지원이 기본 터미널을 가져오지 못함
  • 77926: "string;" 입력 시 "strings;"가 삽입되는 경우 발생

감사합니다

마지막으로, VS Code를 더욱 발전시키는 데 도움을 준 다음 분들께 진심으로 감사드립니다.

vscode 기여

이슈 추적에 대한 기여

수신되는 이슈를 관리하는 데 도움이 되고 싶으시면 커뮤니티 이슈 추적 페이지를 참조하세요.

language-server-protocol 기여

debug-adapter-protocol에 기여

vscode-generator-code에 대한 기여

vscode-vsce 기여

inno-updater에 대한 기여

localization 기여

Microsoft Localization Community Platform (MLCP)를 사용하는 800명 이상의 클라우드 + AI 현지화 커뮤니티 회원이 있으며, Visual Studio Code에 약 100명의 활성 기여자가 있습니다. 새로운 번역 제공, 번역 투표 또는 프로세스 개선 제안 등 기여해주신 모든 분들께 감사드립니다.

다음은 기여자의 스냅샷입니다. 프로젝트에 대한 자세한 내용과 기여자 이름 목록을 보려면 프로젝트 사이트(https://aka.ms/vscodeloc)를 방문하십시오.

  • 보스니아어: Ismar Bašanović, Ernad Husremovic.
  • 불가리아어: Hristiqn Hristov, Иван Иванов, Любомир Василев, Gheorghi Penkov.
  • 체코어: Tadeáš Cvrček, Daniel Padrta, David Jareš, Jan Hajek, Jakub Stibůrek, Michal Franc, Jan Kos, Radim Hampl, Jiří Hofman, Samuel Tulach, Jan Brudný.
  • 덴마크어: René Pape, Lasse Stilvang, Allan Kimmer Jensen, Lars Vange Jørgensen, Alexander Matzen, Martin Liversage, Johan Fagerberg, Thomas Larsen, Anders Lund, Anton Ariens.
  • 네덜란드어: Leroy Witteveen, Maxim Janssens, Luc Sieben, Hans Zoons, Jos Verlinde, Eric Algera, Damien van Gageldonk, Maxim Van Damme, Sven Klaasen, Tom Meulemans, Sujith Quintelier.
  • 영국식 영어: Martin Littlecott, Alexander Ogilvie, Tobias Collier, William Wood, Fabio Zuin, Mohit Nain, Dan Jacobs, Sulkhan Ninidze, Giorgi Jambazishvili, alshyab wa3ed, YASHU MITTAL, Tejas kale, Mohammad Idrees, Chris Dias.
  • 핀란드어: Petri Niinimäki, Kiti Suupohja, Lasse Leppänen, Sebastian de Mel, Riku Riikonen, Valtteri Vatanen.
  • 프랑스어: Antoine Griffard, Thierry DEMAN-BARCELÒ, Corwin D'Ambre, Mohamed Sahbi, Rodolphe NOEL, Maxime Coquerel, Steven Dugois, Cédric M., Michael VAUDIN, Bastien Boussouf, franto.
  • 독일어: Julian Pritzi, Jakob von der Haar, Frank Lindecke, Dejan Dinic, Florian Erbs, Patrick Burke, Mario Koschischek, Florian Berger, Christof Opresnik, Hans Meiser, Carsten Kneip, Ettore Atalan, Thorsten Hans, Meghana Garise, Sebastian Seidl.
  • 그리스어: Δημήτρης Παπαϊωάννου, Sotiris Koukios-Panopoulos, Jim Spentzos, Θοδωρής Τσιρπάνης, Stratos Kourtzanidis, Charalampos Fanoulis, John D, Vassilis Vouvonikos.
  • 히브리어: חיים לבוב, Shalom Craimer, Matan Amos, Eyal Ellenbogen, Snir Broshi, Kyle Orin.
  • 힌디어: Satish Yadav, Amit Gusain, Sanyam Jain, Abhirav Kushwaha, Ashok Kumar Rathore, nirav adatiya, Rajeev Desai, shaswat rungta, Kumar Vaibhav, Pramit Das, Jagjeet Singh, Pratishek PII, Kiren Paul, Chethana S, Kishan K, Dhanvi Kapila.
  • 헝가리어: Levente Borbély, Péter Nagy, Levente Hallai Seiler, Dániel Tar, Richard Borcsik, Boldi Kemény.
  • 중국어 간체: Tingting Yi, 斌 项, paul cheung, Yiting Zhu, 建东 薛, feiyun0112 feiyun0112, Joel Yang, 刘瑞恒 刘瑞恒, Edi Wang, Junzhe Liu, Dave Young, 张锐, Yizhi Gu, Fan Su, 昊宇 周, Justin Liu, Pluwen, Tony Xia, Yu Zhang, XIANG ZUO, 少民 谈, 彦佐 刘, Zhiqiang Li, 福永 叶, G.Y. Z, Hao Hu, 志乐 龚, meng shao, Horie Yuan, Xiangrui Kong, Liam Kennedy, 王文杰, 赵畅畅, 松阳 樊, anson zhang, Young Bige, Shi Liu, Wang Debang, Jessica Zhang, Licheng Ren, 驰 雷, sun qing, xiong Fu, Lynne Dong, zhao yu, 吉姆 舒, 红东 黄, 游 尤, 剑秋 陶, Hanlin Yang, , bh wu, Bravo Yeung, Michael Zhang, Hanyu ZHANG, Y F, WangCG duoduobear, ziqiang sun, 越 郑, 正元 刘, Jiang LI, 擎 钟, peng wei, 涛 徐, 逍遥 许, Charles Lee, 瑜 周, WL, 伟 全, rsy iridescent, Simon Chan, 海龙 黄, 仁松 陈, Jieting Xu, panda small, 翼 张, Chen Yang, Wang Weixuan, 舜杰 杨, Ludi Fang, 雨齐 刘, 建 周, 涛 罗, cuibty wong, 立飞 李, LI ZHAO, 九鼎 谭.
  • 중국어 번체: 謝政廷, Winnie Lin, LikKee 沥祺 Richie, Martin Lau, Jeremy, 奕濬 潘, 小克, 煾 雪.
  • 인도네시아어: Jakka Prihatna, Septian Adi, Arif Fahmi, Laurensius Dede Suhardiman, maziyank, Heston Sinuraya, Hendra Widjaja, Don Nisnoni, Rachmat Wahidi, Franky So, Bervianto Leo Pratama, Eriawan Kusumawardhono, Rifani Arsyad, Afnizar Nur Ghifari, Christian Elbrianno, Pradipta Hendri, Azhe Kun.
  • 이탈리아어: Alessandro Alpi, Bruni Luca, Luigi Bruno, Andrea Dottor, Riccardo Cappello, Aldo Donetti, andrea falco, Emanuele Meazzo, Michael Longo, Marco Dal Pino.
  • 일본어: EbXpJ6bp -, nh, Kyohei Uchida, Yoshihisa Ozaki, Hasefumi, TENMYO Masakazu, Takayuki Fuwa, Michihito Kumamoto, Koichi Makino, Seiji Momoto, Aya Tokura, Yosuke Sano, Makoto Sakaguchi, Kyohei Moriyama, 裕子 知念, Rie Moriguchi, Fujio Kojima, 美穂 山本, taniokae, 太郎 西岡, Hiroomi Kurosawa, Kazuya Ujihara, Yasuaki Matsuda.
  • 한국어: Hongju, 우현 조, Jong Heun Shin, 형섭 이, Kyunghee Ko, Youngjae Kim, siin lee, Jae Yong Kum, Hoyeon Han, Kevin Lee, SeungJin Jeong, Hong Kwon.
  • 라트비아어: Kaspars Bergs, Andris Vilde.
  • 리투아니아어: Andrius Svylas, Augustas Grikšas, Tautvydas Derzinskas, Karolis Kundrotas, Martynas J..
  • 노르웨이어: Andreas Rødland, Cookius Monsterius, Dag H. Baardsen, Ole Kristian Losvik, Stephan Eriksen.
  • 폴란드어: Warchlak, Wojciech Maj, Marcin Weksznejder, Rafał Całka, Tomasz Świstak, Tomasz Wiśniewski, Marek Biedrzycki, Szymon Seliga, Michal Szulc, Jakub Żmidziński, Bartek PL, Igor 05, Rafał Wolak, Tomasz Chojnacki, Piotr Grędowski, Czech Kaczmarek, Artur Pelczar, Marcin Floryan, Paweł Modrzejewski, Jakub Jedryszek, ‎Michał Stojke, Artur Zdanowski.
  • 포르투갈어 (브라질): Alessandro Trovato, Thiago Dupin Ugeda, Weslei A. de T. Marinho, Rafael Lima Teixeira, Gerardo Magela Machado da Silva, Marcos Albuquerque, Loiane Groner, Alessandro Fragnani, Judson Santiago, Andrei Bosco, Fábio Corrêa, Roberto Fonseca, Fabio Lux, Emmanuel Gomes Brandão, Guilherme Pais, Rodrigo Vieira, André Gama.
  • 포르투갈어 (포르투갈): Ana Rebelo, Nuno Carapito, Pedro Daniel, Pedro Teixeira, João Carvalho, Diogo Barros, José Rodrigues, Sandro Pereira, Vitor Barbosa, Tiago Antunes.
  • 루마니아어: Mihai Marinescu, Stefan Gabos, Alexandru Staicu.
  • 러시아어: Andrey Veselov, Дмитрий Кирьянов, michael v, Иван Лещенко, nata kazakova, Анатолий Калужин, Валерий Батурин, Эдуард Тихонов.
  • 세르비아어: Milos Zivkovic, Radovan Skendzic.
  • 스페인어: Andy Gonzalez, Alvaro Enrique Ruano, Engel Aguilar, Carlos Mendible, José María Aguilar, David Fernández Aldana, Ricardo Rubio, Thierry DEMAN, julian3xl, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta, Jorge Serrano Pérez, Ricardo Estrada Rdez.
  • 스웨덴어: Johan Spånberg, Notetur Nomen.
  • 타밀어: Merbin J Anselm, Kondasamy Jayaraman, Mani M, Boopesh Kumar, Vignesh Rajendran, Jeyanthinath Muthuram, Jaganathan B, Nithun Harikrishnan, Purusothaman Ramanujam, Krishna Pravin, Jeffin R P, Karunakaran Samayan, Vetri ..
  • 터키어: Meryem Aytek, BlueAngel-MG, Fıratcan Sucu, Ahmetcan Aksu, Ömer Sert, Mehmet Yönügül, Anıl MISIRLIOĞLU, Sinan Açar, Misir Jafarov, Umut Can Alparslan, Yakup Ad, Hüseyin Fahri Uzun, S. Ferit Arslan, Mesut Pişkin, Okan Çetin, Bruh Moment, Muhammed Emin TİFTİKÇİ, Burak Göksel.
  • 우크라이나어: Dmytro Kutianskyi, Arthur Murauskas, Sviatoslav Ivaskiv, Yaroslav Y, George Molchanyuk, Did Kokos, Alexander Varchenko, Вадим Шашков, Евгений Коростылёв.
  • 베트남어: Khôi Phạm, Van-Tien Hoang, Belikhun, Việt Anh Nguyễn, Spepirus Shouru, Vuong Bui, Chủ Tất.
© . This site is unofficial and not affiliated with Microsoft.