ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Mai 2022 (Version 1.68)

Update 1.68.1: Das Update behebt diese Probleme.

Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Willkommen zur Mai 2022-Version von Visual Studio Code. Es gibt viele Updates in dieser Version, die Ihnen hoffentlich gefallen werden. Einige der wichtigsten Highlights sind:

Wenn Sie diese Release Notes online lesen möchten, gehen Sie zu Updates auf code.visualstudio.com.

Insiders: Möchten Sie neue Funktionen so schnell wie möglich ausprobieren? Sie können den nächtlichen Insiders-Build herunterladen und die neuesten Updates ausprobieren, sobald sie verfügbar sind.

Workbench

Verbesserungen bei der Konfiguration der Anzeigesprache

Der Befehl Anzeigesprache konfigurieren wurde überarbeitet, um Folgendes einzuschließen:

  • Der Name der Sprache in dieser Sprache.
  • Ein Abschnitt Verfügbare Sprachen, der anzeigt, welche Sprachen nicht auf Ihrem Computer installiert sind. Die Auswahl einer Sprache installiert diese automatisch und wendet die Sprache an.

Configure Display Language dropdown with installed and available Language Packs in their language

Theme: Panda Theme

Dies sollte bei der Entdeckung verfügbarer Sprachpakete helfen. Lassen Sie uns wissen, was Sie davon halten!

Probleme-Panel-Tabellenansicht

In diesem Meilenstein haben wir eine neue Funktion hinzugefügt, mit der Benutzer den Ansichtsmodus des Probleme-Panels zwischen Baum und Tabelle umschalten können. Im Vergleich zur Baumansicht zeigt die Tabelle die Quelle (Sprachdienst oder Erweiterung) jedes Problems an, was es den Benutzern ermöglicht, die Probleme nach ihrer Quelle zu filtern.

Problems panel table view

Theme: GitHub Dark Dimmed Theme

Sie können die Ansichts-UI mit der Schaltfläche Als Tabelle anzeigen/Als Baum anzeigen oben rechts im Probleme-Panel umschalten oder den Standardansichtsmodus mit der Einstellung Probleme: Standardansichtsmodus (problems.defaultViewMode) ändern.

Problems panel View at Table button

Veraltete Erweiterungen

In diesem Meilenstein haben wir die Unterstützung für veraltete Erweiterungen in VS Code hinzugefügt. Eine Erweiterung kann einfach veraltet sein oder zugunsten einer anderen Erweiterung veraltet sein, oder wenn ihre Funktionalität in VS Code integriert ist. VS Code rendert veraltete Erweiterungen in der Erweiterungsansicht, wie unten gezeigt.

Eine veraltete Erweiterung, die nicht mehr gepflegt wird.

Deprecated extension with no maintenance

Eine Erweiterung, die zugunsten einer anderen Erweiterung veraltet ist. In diesem Fall erlaubt VS Code den Benutzern nicht, diese Erweiterung zu installieren.

Deprecated extension with alternative

Eine veraltete Erweiterung, deren Funktionalität in VS Code integriert ist und die durch Konfiguration von Einstellungen aktiviert werden kann.

Deprecated extension with builtin to VS Code

VS Code wird eine veraltete Erweiterung nicht automatisch migrieren oder deinstallieren. Es wird eine Schaltfläche Migrieren geben, die Sie zur empfohlenen Erweiterung leitet.

Migrate deprecated extension

Theme: GitHub Dark Dimmed Theme

Hinweis: Die Liste der veralteten Erweiterungen wird von VS Code gepflegt. Wenn Sie eine Erweiterung haben, die Ihrer Meinung nach veraltet sein sollte, kontaktieren Sie uns, indem Sie in dieser Diskussion kommentieren.

Erweiterungs-Sponsoring

VS Code erlaubt es Benutzern jetzt, ihre Lieblingserweiterungen zu sponsern. Wenn eine Erweiterung gesponsert werden kann, rendert VS Code eine Schaltfläche Sponsor auf der Detailseite der Erweiterungsansicht, wie unten gezeigt.

Sponsor extension button on Extensions view Details page

Theme: GitHub Dark Dimmed Theme

Die Schaltfläche Sponsor leitet Sie zur Sponsoring-URL der Erweiterung weiter, wo Sie Ihre Unterstützung leisten können. Lesen Sie Erweiterungs-Sponsoring, um zu erfahren, wie Sie diese Funktion für Ihre Erweiterung aktivieren.

Explorer-Dateien basierend auf .gitignore ausblenden

Der Datei-Explorer unterstützt jetzt das Parsen und Ausblenden von Dateien, die von Ihrer .gitignore-Datei ausgeschlossen werden. Dies kann über die Einstellung Explorer: Git Ignore ausschließen (explorer.excludeGitIgnore) aktiviert werden. Diese Einstellung funktioniert zusammen mit files.exclude, um unerwünschte Dateien aus dem Explorer auszublenden.

Hinweis: Negierte Globs wie !package.json sind derzeit nicht parsebar.

Hover-Position sperren

Einige benutzerdefinierte Hovers sind aufgrund anderer UI-Elemente (z. B. eine Bildlaufleiste) schwer oder unmöglich mit der Maus zu überfahren. Das Halten von Alt, während ein Hover aktiv ist, sperrt ihn jetzt, gibt ihm einen breiteren Rahmen und verhindert, dass Mausbewegungen außerhalb des Hovers ihn ausblenden. Dies ist in erster Linie eine Barrierefreiheitsfunktion, um Hovers besser mit Bildschirmlupe zu machen, aber auch nützlich zum Kopieren von Text aus Hovers. Beachten Sie, dass diese Funktion nur außerhalb des Editors gilt, da Editor-Hovers immer mit der Maus überfahren werden können, es sei denn, dies wird über die Einstellung editor.hover.sticky anders angegeben.

Verbesserungen am Einstellungseditor

Der Einstellungseditor zeigt jetzt eine Anzeige für Standardwertüberschreibungen für sprachspezifische Einstellungen an. Sie können sprachspezifische Einstellungen anzeigen, indem Sie einen Sprachfilter in der Suchleiste des Einstellungseditors hinzufügen, entweder indem Sie ihn explizit eingeben (@lang:javascript) oder indem Sie auf die Filtertaste rechts neben der Suchleiste klicken und die Option Sprache auswählen.

Wenn die Anzeige für Standardwertüberschreibungen angezeigt wird, bedeutet dies, dass der Standardwert der sprachspezifischen Einstellung von einer Erweiterung überschrieben wurde. Die Anzeige zeigt auch an, welche Erweiterung den Standardwert überschrieben hat.

Thema: Light Pink

Diese Iteration behebt auch ein Verhalten, bei dem einige Links im Einstellungseditor nicht richtig weitergeleitet wurden, wenn bereits eine Suchanfrage in der Suchleiste des Einstellungseditors vorhanden war. Die Links haben jetzt auch das richtige Styling, damit deutlicher wird, wenn man mit der Maus darüber fährt.

<video src="/assets/updates/1_68/settings-editor-working-links.mp4" autoplay loop controls muted title="Nachdem nach dem Wort "font" im Einstellungseditor gesucht und die Kategorie Terminal in der Inhaltsübersicht ausgewählt wurde, wird die Einstellung terminal.integrated.fontFamily angezeigt und ihre Beschreibung enthält einen Link zur Einstellung editor.fontFamily. Das Klicken auf den Link führt nun korrekt zur Einstellung.">

Thema: Light Pink

Kommentar-Widget-Primärtaste

Das Kommentar-Widget verwendet die Primärtastenfarbe für die erste (am weitesten rechts befindliche) Aktion.

Add Comment has the primary button color

Terminal

Hintergrundfarbe für gefundene Übereinstimmungen

Im letzten Release wurde die Suche im Terminal implementiert, um einen Rand um alle Übereinstimmungen anzuzeigen. Dies war jedoch eine temporäre Lösung, bis die Unterstützung für die dynamische Änderung des Hintergrunds von Zellen möglich war. Ein farbiger Hintergrund ist jetzt Standard für Themes beim Hervorheben von Übereinstimmungen und die Gesamterfahrung sollte dem Editor ähneln.

Find now uses the blue from the editor's find for the active match and the orange for highlights

Wenn Sie ein Theme-Autor sind, der terminal.findMatchBorder oder terminal.findMatchHighlightBorder verwendet hat, empfehlen wir die Migration zu terminal.findMatchBackground und terminal.findMatchHighlightBackground, wenn dies besser zum Theme passt oder den Kontrast verbessert.

Verbesserungen bei Kontrast und minimalem Kontrastverhältnis

Die Arbeit am Hintergrund der gefundenen Übereinstimmungen hat die Flexibilität des Terminals bei der Arbeit mit Hintergrund- und Vordergrundfarben erheblich erhöht. Aus diesem Grund wurden Kontrastverbesserungen im Terminal vorgenommen, die die visuellen Darstellungen des Terminals näher an den Editor anpassen. Darüber hinaus gibt es jetzt die Funktion für das minimale Kontrastverhältnis, die die Vordergrundfarbe des Textes dynamisch ändert, um die Sichtbarkeit zu verbessern.

  • Die Luminanz geht nun in die andere Richtung, wenn der Kontrast nicht erfüllt ist. Wenn beispielsweise der Kontrast für dunkelgrauen Text auf einem helleren grauen Hintergrund mit reinem Schwarz (#_000000) nicht erfüllt ist, wird die Farbe versuchen, sich auch Weiß anzunähern, und der Wert, der das gewünschte Kontrastverhältnis am besten erfüllt, wird verwendet.

    Darker grey on lighter dark can now use a light foreground color if needed

  • Die Auswahl wird nun unter dem Text gezeichnet, wenn die GPU-Beschleunigung deaktiviert ist und opake Farben unterstützt. Zuvor musste dies teilweise transparent sein und die Vordergrundfarbe auswaschen. Dank dieser Änderung verwendet die Auswahlfarbe nun dieselbe Farbe wie im Editor.

    Foreground color are retained in selections

  • Nerd Font-Symbole sollten nun das minimale Kontrastverhältnis anwenden, um sich mit dem umliegenden Text zu verbinden, während Powerline-Symbole und Box-Drawing-Zeichen das minimale Kontrastverhältnis nicht anwenden, da sie oft an invertierten Zellen ohne Vordergrundzeichen angrenzen.

    Powerlines no longer have odd colors between the colored sections

  • Themes können nun eine feste Auswahl-Vordergrundfarbe angeben, die standardmäßig in High-Contrast-Themes verwendet wird.

    The dark high contrast theme now uses black as its selection foreground

  • Mehrere Fehler wurden behoben, um die resultierende Vordergrundfarbe korrekter zu gestalten.

Zur Erinnerung: Das minimale Kontrastverhältnis kann deaktiviert werden, wenn Sie die Originalfarben bevorzugen, indem Sie "terminal.integrated.minimumContrastRatio": 1 einstellen.

Aufgaben

Glob-Muster für Standardaufgaben

Standard-Build- und Testaufgaben können nun so konfiguriert werden, dass sie nur dann "Standard" sind, wenn die aktive Datei einem Dateinamensmuster entspricht.

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo txt",
            "type": "shell",
            "command": "echo TextFile",
            "group": {
                "kind": "build",
                "isDefault": "**.txt" // This is a glob pattern which will only match when the active file has a .txt extension.
            }
        },
        {
            "label": "echo js",
            "type": "shell",
            "command": "echo JavascriptFile",
            "group": {
                "kind": "build",
                "isDefault": "**.js" // This is a glob pattern which will only match when the active file has a .js extension.
            },
        }
    ]
}

Quellcodeverwaltung

Es gab einige Updates für die Git-Erweiterung, die mit unserem neuen Pull-Request-Workflow übereinstimmen.

Git: Branch-Präfix

Um den Prozess der Erstellung eines neuen Branches zu vereinfachen, gibt es eine neue Einstellung, git.branchPrefix, die eine Zeichenfolge angibt, die beim Erstellen eines neuen Branches als Präfix verwendet werden soll.

Git: Generierung von Branch-Namen

Eine neue Einstellung git.branchRandomName.enable lässt VS Code zufällige Branch-Namen vorschlagen, wann immer ein neuer Branch erstellt wird. Die zufälligen Namen werden aus Wörterbüchern generiert, die Sie über die Einstellung git.branchRandomName.dictionary steuern können. Die unterstützten Wörterbücher sind: adjectives (Standard), animals (Standard), colors und numbers.

Git: Branch-Schutz

Mit der neuen Einstellung git.branchProtection können Sie bestimmte Branches als geschützt konfigurieren. VS Code vermeidet direkte Commits auf geschützten Branches und bietet Ihnen stattdessen die Möglichkeit, einen neuen Branch zum Committen zu erstellen. Sie können dieses Verhalten mit der Einstellung git.branchProtectionPrompt feinabstimmen.

GitHub: Unterstützung für Pull-Request-Vorlagen

Die GitHub-Erweiterung versteht nun Pull-Request-Vorlagen und verwendet sie als Basis bei der Erstellung eines PR aus einem neu geforkten Repository.

Notebooks

Änderungen an der Zellen-Anzeige

Wir haben abgestimmt, wie Zellen außerhalb des Ansichtsfensters in einigen Szenarien angezeigt werden.

Wenn Sie auf eine Zelle in der Gliederungsansicht klicken und sich diese Zelle außerhalb des Ansichtsfensters befindet, scrollt das Notebook nun, um diese Zelle etwa im oberen Fünftel des Ansichtsfensters anzuzeigen. Dies entspricht dem Verhalten der Gliederung im Texteditor.

Wenn sich der Cursor in einem Zellen-Editor befindet, können Sie den Cursor über die erste oder letzte Zeile des Editors hinaus bewegen, um ihn in den nächsten Zellen-Editor zu verschieben. Wenn Sie nun den Cursor in einen Editor bewegen, dessen Zelle sich außerhalb des Ansichtsfensters befindet, scrollt das Notebook gerade so weit, um diese Zeile im Editor anzuzeigen, anstatt aufzuspringen, um die Zelle in der Mitte des Ansichtsfensters anzuzeigen.

Suchen und Ersetzen unterstützt das Befüllen der Abfrage aus Cursor/Auswahl

Die Suchfunktion im Notebook-Editor unterstützt jetzt das Befüllen des Suchstrings aus der Editorauswahl. Das Verhalten wird durch die Editor-Einstellung editor.find.seedSearchStringFromSelection gesteuert.

Debugging

Ausführen und Debuggen ohne launch.json

Wenn Sie noch keine launch.json-Konfigurationsdatei eingerichtet haben und F5 drücken oder auf die Schaltfläche Ausführen und Debuggen in der Debug-Ansicht klicken, wählt VS Code einen Debugger basierend auf der Programmiersprache in der aktuell aktiven Datei aus. Wenn Sie keine Datei geöffnet haben, werden Sie gefragt, welchen Debugger Sie verwenden möchten. Diese Erfahrung kann etwas verwirrend sein, daher haben wir einige Verbesserungen vorgenommen.

Select debugger prompt before (alphabetical) and after (activated debugger at the top)

Wenn eine Erweiterung bereits aktiviert wurde, bevor Sie mit dem Debugging begonnen haben, wird der Debugger dieser Erweiterung nach oben sortiert. Dies kann beispielsweise nützlich sein, wenn die Erweiterung durch das Ausführen eines Befehls dieser Erweiterung, das Öffnen einer Datei einer Sprache, die diese Erweiterung aktiviert, oder durch ein workspaceContains-Muster, das zu Ihrem Arbeitsbereich passt, aktiviert wurde. Wenn Sie den Debugger in dieser Sitzung verwendet haben, wird er ebenfalls nach oben sortiert.

Die Chrome/Edge-Debugger wurden in Web-App (Chrome) und Web-App (Edge) umbenannt, um Verwechslungen mit anderen Debuggern wie der Flutter-Erweiterung zu vermeiden, die ebenfalls Apps im Browser ausführt.

Sprachen

TypeScript 4.7

VS Code bündelt jetzt TypeScript 4.7.3. Dieses große TypeScript bringt neue Sprachfunktionen, darunter verbesserte Kontrollflussanalyse und Unterstützung für ECMAScript-Modulunterstützung in Node.js. Es enthält auch neue Tooling-Funktionen und behebt eine Reihe wichtiger Fehler!

Zu Quellendefinition wechseln

Eine der am längsten bestehenden und am häufigsten gewünschten Funktionsanfragen von VS Code ist es, VS Code dazu zu bringen, zur JavaScript-Implementierung von Funktionen und Symbolen aus externen Bibliotheken zu navigieren. Derzeit springt Zu Definition wechseln zur Typdefinitionsdatei (der .d.ts-Datei), die die Typen für die Ziel Funktion oder das Symbol definiert. Dies ist nützlich, wenn Sie die Typen oder die Dokumentation für diese Symbole überprüfen müssen, aber die tatsächliche Implementierung des Codes verbirgt. Das aktuelle Verhalten verwirrt auch viele JavaScript-Benutzer, die den TypeScript-Typ aus der .d.ts möglicherweise nicht verstehen.

Auch wenn die Änderung von Zu Definition wechseln zur JavaScript-Implementierung eines Symbols navigieren zu lassen, einfach klingt, gibt es einen Grund, warum diese Funktionsanfrage so lange offen ist. JavaScript (und insbesondere das kompilierte JavaScript, das von vielen Bibliotheken ausgeliefert wird) ist wesentlich schwieriger zu analysieren als eine .d.ts. Der Versuch, den gesamten JavaScript-Code unter node_modules zu analysieren, wäre sowohl langsam als auch würde den Speicherverbrauch drastisch erhöhen. Es gibt auch viele JavaScript-Muster, die die VS Code IntelliSense-Engine nicht versteht.

Hier kommt der neue Befehl Zu Quellendefinition wechseln ins Spiel. Wenn Sie diesen Befehl entweder über das Kontextmenü des Editors oder über die Befehlspalette ausführen, versucht TypeScript, die JavaScript-Implementierung des Symbols zu finden und dorthin zu navigieren. Dies kann einige Sekunden dauern und wir erzielen möglicherweise nicht immer das richtige Ergebnis, aber in vielen Fällen sollte es nützlich sein.

Wir arbeiten aktiv daran, diese Funktion zu verbessern. Probieren Sie sie also in Ihrer Codebasis aus und teilen Sie uns Ihr Feedback mit.

Objektmethoden-Snippets

Objektmethoden-Snippets helfen Ihnen, schnell Methoden zu Objektliteralen hinzuzufügen, die eine gegebene Schnittstelle implementieren.

Innerhalb eines Objektliterals sollten Sie zwei Vorschläge für jede mögliche Methode sehen: eine, die nur den Methodennamen einfügt, und eine, die die vollständige Signatur der Methode einfügt. Sie können Objektmethoden-Snippets auch vollständig deaktivieren, indem Sie "typescript.suggest.classMemberSnippets.enabled": false oder "javascript.suggest.classMemberSnippets.enabled": false setzen.

Gruppenbewusstes Organisieren von Importen

Der Befehl Importe organisieren für JavaScript und TypeScript ermöglicht es Ihnen, Ihre Liste von Importen schnell zu bereinigen. Wenn er ausgeführt wird, entfernt er sowohl ungenutzte Importe als auch sortiert die Importe alphabetisch.

Einige Codebasen bevorzugen jedoch ein gewisses Maß an manueller Kontrolle darüber, wie ihre Importe organisiert werden. Die Gruppierung externer vs. interner Importe ist eines der häufigsten Beispiele dafür.

// local code
import * as bbb from './bbb';
import * as ccc from './ccc';
import * as aaa from './aaa';

// built-ins
import * as path from 'path';
import * as child_process from 'child_process';
import * as fs from 'fs';

// some code...

In älteren VS Code-Versionen würde das Ausführen von Importe organisieren hier zu Folgendem führen:

// local code
import * as child_process from 'child_process';
import * as fs from 'fs';
// built-ins
import * as path from 'path';
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';

// some code...

Igitt! Dies geschieht, weil alle Importe alphabetisch sortiert werden und VS Code sogar versucht, Kommentare und Zeilenumbrüche dabei beizubehalten.

Mit TypeScript 4.7 ist Importe organisieren jedoch gruppenbewusst. Das Ausführen auf dem obigen Code sieht etwas mehr so aus, wie Sie es erwarten würden:

// local code
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';

// built-ins
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as path from 'path';

// some code...

Beachten Sie, wie die Importe nun sortiert wurden, während sie immer noch innerhalb ihrer Gruppen verblieben sind. Viel besser!

Strikte Nullprüfungen in impliziten Projekten aktiviert

Strikte Nullprüfungen sind in impliziten Projekten standardmäßig für JavaScript und TypeScript aktiviert. Dies sollte zu genaueren IntelliSense-Ergebnissen und einer verbesserten Typüberprüfung führen, die häufige Programmierfehler erkennen kann.

A strict null error. getElementById may return null if no element with the ID exists

Dieses neue Verhalten gilt nur für Dateien, die nicht Teil eines jsconfig- oder tsconfig-Projekts sind. Sie können es deaktivieren, indem Sie Folgendes einstellen: "js/ts.implicitProjectConfig.strictNullChecks": false. Für Dateien, die Teil eines jsconfig- oder tsconfig-Projekts sind, müssen Sie weiterhin strikte Nullprüfungen in der Konfigurationsdatei aktivieren.

Sie können jetzt Zu Definition wechseln für Referenzlinks in Markdown-Dateien verwenden. Dies springt von der Referenz zur Linkdefinition in der aktuellen Datei.

Erweiterte JSON-Schema-Unterstützung

Der integrierte JSON-Sprachdienst hat die Unterstützung für JSON Schema Draft 2019-09 und JSON Schema Draft 2020-12 verbessert. Es wird keine Warnung mehr angezeigt, wenn ein solches Schema verwendet wird.

Es gibt immer noch einige Funktionen, die nicht vollständig unterstützt werden. Es wird eine Warnung angezeigt, wenn sie von einem Schema verwendet werden. Die nicht unterstützten Eigenschaften sind:

  • Teilschemata mit $id
  • $recursiveRef/Anchor (Draft 2019-09)
  • $dynamicRef/Anchor (Draft 2020-12)

VS Code für das Web

Kern-Lokalisierungsunterstützung

Wir haben die anfängliche Lokalisierungsunterstützung für VS Code for the Web eingeführt. VS Code wird auf der ganzen Welt verwendet, und für viele Benutzer ist Englisch nicht ihre Muttersprache (oder eine Sprache, mit der sie überhaupt vertraut sind!). Seit Jahren installieren VS Code-Benutzer Sprachpakete aus dem Marketplace, um VS Code in einer anderen Sprache als Englisch zu verwenden. Für VS Code for the Web haben wir uns für einen anderen Ansatz entschieden, der besser mit der heutigen Arbeitsweise des Webs übereinstimmt.

Für Benutzer, die ihren Browser auf eine unserer Kernsprachen eingestellt haben, wendet vscode.dev automatisch Übersetzungen in dieser Sprache an. Die unterstützten Sprachen sind im vscode-loc-Repository dokumentiert.

Um beispielsweise die Anzeigesprache in Microsoft Edge zu konfigurieren, würden Sie Einstellungen > Sprachen verwenden.

Microsoft Edge Settings Languages page

Sobald dies eingestellt ist, wird beim Aufruf von vscode.dev (oder insiders.vscode.dev) die Anzeige auf Deutsch erfolgen.

vscode.dev in a browser displayed in German

Theme: Panda Theme

In den nächsten Monaten werden wir die Lokalisierung für Erweiterungen (sowohl für die mit VS Code ausgelieferten als auch für die nicht mitgelieferten) aktivieren, damit Erweiterungsautoren auch nicht-englischsprachige Benutzer unterstützen können. Bleiben Sie dran!

Remote Repositories

Wenn Sie den Befehl Remote Repositories > Weiterarbeiten an... verwenden, um ein GitHub- oder Azure Repos-Repository lokal zu klonen und es in Desktop-VS Code zu öffnen, können Sie jetzt remoteHub.gitProtocol so konfigurieren, dass immer mit http- oder ssh-URLs geklont wird.

Entwicklungscontainer-Spezifikation

Unsere Entwicklungs-Container-Teams von Microsoft und GitHub setzen die aktive Entwicklung an der neuen Dev Container Specification fort, und diese Iteration brachte mehrere spannende Highlights.

Referenzimplementierung

Wir haben eine Open-Source-Befehlszeilenschnittstelle (CLI) als Referenzimplementierung für die Spezifikation veröffentlicht. Die CLI baut einen Dev-Container aus einer devcontainer.json und startet ihn. Sie kann entweder direkt verwendet oder in Produkt-Erfahrungen integriert werden.

Die CLI ist im neuen Repository devcontainers/cli verfügbar. Sie können in der README erfahren, wie Sie loslegen, und in diesem Blogbeitrag mehr lesen.

Die CLI befindet sich in aktiver Entwicklung und wird sich weiterentwickeln, um mehr Szenarien besser zu unterstützen, z. B. eine stärkere Unterstützung für einzelne Benutzer. Wir würden uns freuen, Ihr Feedback zu erhalten. Daher haben wir ein Issue speziell für Feedback zur CLI eröffnet und begrüßen weitere Issues und PRs im Repo.

Dev Container in CI

Ein GitHub Action und eine Azure DevOps Task sind für die Ausführung des Dev-Containers eines Repositorys in Continuous-Integration (CI)-Builds verfügbar. Dies ermöglicht es Ihnen, dasselbe Setup, das Sie für die lokale Entwicklung verwenden, auch für den Build und Test Ihres Codes in CI zu verwenden. Weitere Details finden Sie in der devcontainers/ci README.

Beispielhafte Nutzung der GitHub Action

- name: Build and run dev container task
  uses: devcontainers/ci@v0.2
  with:
    imageName: ghcr.io/example/example-devcontainer
    runCmd: make ci-build

Beispielhafte Nutzung der Azure DevOps Task

- task: DevcontainersCI@0
  inputs:
    imageName: 'yourregistry.azurecr.io/example-dev-container'
    runCmd: 'make ci-build'
    sourceBranchFilterForPush: refs/heads/main

Spezifikation

Die aktive Entwicklung an der Spezifikation wird fortgesetzt, und wir haben eine Anfangsversion im Repository devcontainers/spec veröffentlicht.

Wie bei der CLI bleiben Sie dran für weitere Updates und Fortschritte, und wir würden uns freuen, Ihr Feedback zu hören.

Weiterführende Lektüre

Sie können alles über Entwicklungcontainer und die Spezifikation unter https://containers.dev lesen.

Beiträge zu Erweiterungen

Python

Keine Interpretererkennung beim Start

Die Python-Erweiterung löst die Erkennung jetzt nur noch automatisch aus, wenn

  • Sie den Befehl Python: Interpreter auswählen verwenden, um einen anderen Interpreter auszuwählen.
  • Ein bestimmter Gültigkeitsbereich (Arbeitsbereich oder global) zum ersten Mal geöffnet wird.
  • Kein Python installiert ist.

Da die Erkennung beim Start nicht automatisch ausgelöst wird, führt dies zu einem sofortigen Laden und schnellerem Start anderer Funktionen wie des Sprachservers. Wenn jedoch die Jupyter-Erweiterung installiert/aktiviert ist, wird die Erkennung beim Start immer noch von Jupyter ausgelöst.

Lokalisierung aktivieren

Die Python-Erweiterung unterstützt jetzt Übersetzungen in allen Sprachen, die VS Code unterstützt. Wir haben die Art und Weise, wie wir die Übersetzungen unserer Befehle, Benachrichtigungen, Titel usw. erhalten, mit vscode-nls aktualisiert. Diese Übersetzungen werden von einem Lokalisierungsteam gepflegt, um sicherzustellen, dass sie aktuell und korrekt sind.

Jupyter

Web-Erweiterung

Wir haben Fortschritte bei der Unterstützung weiterer Kernfunktionen in der Webversion der Jupyter-Erweiterung gemacht.

In diesem Monat wurden die folgenden Funktionen in die Web-Erweiterung portiert:

  • https-Unterstützung
  • Kernel-Vervollständigungen
  • ipywidgets
  • Notebook-Debugging
  • Variablenansicht
  • Exportieren
  • Interaktives Fenster

Wenn Sie mit der Funktionalität experimentieren möchten, starten Sie Jupyter von Ihrem lokalen Computer mit

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

Verbinden Sie sich dann damit über den Befehl Jupyter: Jupyter-Server für Verbindungen angeben aus vscode.dev.

Weitere Informationen (und zum Kommentieren) finden Sie in dieser Diskussions- Diskussion.

Remote-Entwicklung

Die Arbeit an den Remote Development-Erweiterungen wird fortgesetzt. Diese ermöglichen es Ihnen, einen Container, eine Remote-Maschine oder das Windows Subsystem for Linux (WSL) als voll ausgestattete Entwicklungsumgebung zu nutzen.

Informationen zu neuen Erweiterungsfunktionen und behobenen Fehlern finden Sie in den Remote Development Release Notes.

GitHub Pull Requests und Issues

Es wurden weitere Fortschritte bei der GitHub Pull Requests and Issues-Erweiterung erzielt, die es Ihnen ermöglicht, Pull-Anfragen und Issues zu bearbeiten, zu erstellen und zu verwalten. Highlights dieser Version sind:

  • Auto-Merge-Kontrollkästchen in der Ansicht Pull-Anfrage erstellen

Werfen Sie einen Blick in das Changelog für die Version 0.44.0 der Erweiterung, um weitere Highlights zu sehen.

Remote Repositories-Erweiterungen

Sowohl die GitHub Repositories- als auch die Azure Repos-Erweiterungen unterstützen Übersetzungen in allen Sprachen, die VS Code unterstützt.

Vorschau-Funktionen

Beim Arbeiten mit Markdown ist es leicht, versehentlich einen ungültigen Dateilink oder eine falsche Bildreferenz einzufügen. Vielleicht haben Sie vergessen, dass der Dateiname einen - (Bindestrich) anstelle eines _ (Unterstrich) verwendet hat, oder vielleicht wurde die Datei, auf die Sie verlinken, in ein anderes Verzeichnis verschoben. Oft bemerken Sie diese Fehler erst nach dem Anzeigen der Markdown-Vorschau oder sogar nach der Veröffentlichung. Die neue experimentelle Markdown-Link-Validierung von VS Code kann helfen, diese Fehler zu erkennen.

Mit der Link-Validierung analysiert VS Code Markdown-Links zu Headern, Bildern und anderen lokalen Dateien. Ungültige Links werden als Warnungen oder Fehler gemeldet.

A warning shown in the editor when linking to a file that does not exist

VS Code kann sogar ungültige Links zu bestimmten Headern in anderen Markdown-Dateien erkennen!

Die Link-Validierung ist standardmäßig deaktiviert. Sie können die Link-Validierung ausprobieren, indem Sie "markdown.experimental.validate.enabled": true einstellen.

Es gibt einige Einstellungen, die Sie zur Anpassung der Link-Validierung verwenden können:

  • markdown.experimental.validate.fileLinks.enabled - Aktivieren/Deaktivieren der Validierung von Links zu lokalen Dateien: [Link](/pfad/zu/datei.md)

  • markdown.experimental.validate.headerLinks.enabled - Aktivieren/Deaktivieren der Validierung von Links zu Headern in der aktuellen Datei: [Link](#_ein-header)

  • markdown.experimental.validate.referenceLinks.enabled - Aktivieren/Deaktivieren der Validierung von Referenzlinks: [Link][ref].

  • markdown.experimental.validate.ignoreLinks - Eine Liste von Links, die von der Validierung übersprungen werden. Dies ist nützlich, wenn Sie auf Dateien verlinken, die auf der Festplatte nicht existieren, aber nach der Veröffentlichung des Markdown vorhanden sind.

Lassen Sie uns wissen, was Sie von der neuen Funktion halten!

Wir haben experimentelle Unterstützung für das Einfügen von Bildern oder Dateilinks in Markdown hinzugefügt.

Dies erfordert die Aktivierung von sowohl markdown.experimental.editor.pasteLinks.enabled als auch "editor.experimental.pasteActions.enabled". Sie können derzeit Dateien aus dem VS Code Dateiexplorer kopieren. Das Einfügen von Bilddateien fügt Bildreferenzen ein, während das Einfügen normaler Textdateien Links zu diesen Dateien einfügt.

Terminal Shell-Integration

Shell-Integration (aktiviert mit der Einstellung terminal.integrated.shellIntegration.enabled) und Befehlsdekorationen wurden in dieser Iteration poliert und verbessert.

Einige der Updates beinhalten

  • 146377 Beibehalten des Shell-Status, damit bash-git-prompt und andere Programme funktionieren
  • 148635 Erlauben der Verwendung eines benutzerdefinierten ZDOTDIR für zsh
  • 145801 Beheben von Dekorationen, die auf langsameren Rechnern aus dem Takt geraten
  • 146873 Verbessern der Behandlung bestehender Debug-Traps in bash
  • 148839 Polieren der Meldungen mit dem Befehl Wie funktioniert das? und des Aktivierungsstatus im Hover der Registerkarte
  • 151223 Sicherstellen, dass nach dem Löschen des Puffers die Befehle korrekt verfolgt werden

Fenstersteuerelement-Overlay unter Windows

Wir haben die von Electron bereitgestellte API übernommen, um das Fenstersteuerelement-Overlay unter Windows zu unterstützen. Der wichtigste für den Benutzer sichtbare Vorteil dieser Änderung ist der Zugriff auf die Snap Layouts-Funktion in Windows 11. Aufgrund einiger anhaltender Probleme ist das Fenstersteuerelement-Overlay standardmäßig deaktiviert, Sie können es jedoch mit der experimentellen Einstellung window.experimental.windowControlsOverlay.enabled aktivieren.

Hover over the maximize/restore window control to see Windows 11 Snap layouts

Befehlszentrale

Wir fügen die Befehlszentrale hinzu – eine einfachere Möglichkeit, die Schnellvorschau für Dateien, Befehle und mehr auszulösen.

Command Center in the VS Code title bar

Dies kann über die Einstellung window.experimental.commandCenter aktiviert werden, und wir freuen uns über Ihr Feedback.

Merge-Editor

Wir haben begonnen, an einer besseren Merge-Erfahrung zu arbeiten. Es steckt noch in den Anfängen und wir sind noch nicht bereit für Feedback, aber Sie können es über git.experimental.mergeEditor ausprobieren. Wenn dies aktiviert ist, öffnen sich Dateien mit Merge-Konflikten in einem neuen Merge-Editor, um die Auflösung von Konflikten zu vereinfachen.

Wir werden weiter daran arbeiten. Nutzen Sie Insiders, um unseren Fortschritt zu verfolgen. Wir möchten uns aufrichtig bei Mingpan und unseren Freunden bei Google bedanken, die uns bei dieser Bemühung unterstützen. ❤️

Erweiterungs-Authoring

Finalisierung der Inline-Vervollständigungen

Wir haben die Inline-Vervollständigungs-API finalisiert. Dies ermöglicht es Erweiterungen, Inline-Vervollständigungen bereitzustellen, die vom Vorschlags-Widget entkoppelt sind. Eine Inline-Vervollständigung wird so gerendert, als wäre sie bereits akzeptiert worden, jedoch in grauer Farbe. Benutzer können durch Vorschläge navigieren und sie mit der Tab-Taste akzeptieren. Eine Beispielerweiterung, die Inline-Vervollständigungen verwendet, ist GitHub Copilot. Weitere Informationen finden Sie in der Datei vscode.d.ts, wobei der Einstiegspunkt in die API languages.registerInlineCompletionItemProvider ist.

Finalisierung der Schweregrade von Validierungsnachrichten für InputBox

Unsere InputBox-APIs (über window.showInputBox und window.createInputBox) zum Bereitstellen von Schweregraden bei der Validierung von Benutzereingaben wurden finalisiert.

Wenn Sie dem Benutzer beispielsweise eine Informationsnachricht basierend auf seiner Eingabe anzeigen möchten, kann Ihre Validierungsnachricht Folgendes zurückgeben:

{
  message: 'this is an info message';
  severity: InputBoxValidationSeverity.Info;
}

was dann so aussehen würde:

Input box with 'this is an info message' severity message

Notebook-Editor-API

Die neue Notebook-Editor-API führt einen neuen Typ NotebookEditor ein, der TextEditor ähnelt, aber für Notebooks anstelle von normalen Texteditoren.

const editor = vscode.window.activeNotebookEditor;
if (editor) {
  // Access the underlying notebook document associated with the editor
  console.log(editor.notebook.uri);

  // Change the selection in the current notebook
  editor.selection = new vscode.NotebookRange(1, 3);
}

Sie können window.activeNotebookEditor verwenden, um den aktuellen Notebook-Editor zu erhalten, und Ereignisse wie window.onDidChangeActiveNotebookEditor, um zu beobachten, wann der Benutzer zum neuen Notebook-Editor wechselt.

Erweiterungsaktivierung basierend auf der Zeitleistenansicht

Ein neues Aktivierungsereignis wurde für den Zeitpunkt hinzugefügt, an dem die Zeitleistenansicht sichtbar ist. Dieses Ereignis onView:timeline kann von jeder Erweiterung verwendet werden, ist aber am nützlichsten für Erweiterungen, die die vorgeschlagene Timeline API implementieren.

UX-Richtlinien

Die UX-Richtlinien für Erweiterungsautoren wurden aktualisiert und erweitert, um weitere VS Code-Benutzeroberflächenelemente abzudecken.

UX Guideline example image pointing to View Actions elements

Eine überarbeitete Übersichtsseite führt durch die VS Code-Benutzeroberfläche, um eine visuelle Tour durch die Benutzeroberfläche und gängige UI-Elemente zu geben.

Links zu relevanten Anleitungen, API-Referenzen und Erweiterungsbeispielen wurden jeder dedizierten Seite hinzugefügt. Darüber hinaus wurden alle Beispielbilder in den Richtlinien aktualisiert, um eine aktuelle Version der Benutzeroberfläche zu zeigen.

Sie können nun die empfohlenen Do's und Don'ts für Erweiterungen lesen, die zu diesen UI-Elementen hinzugefügt oder beitragen

Erweiterungssponsoring

In diesem Meilenstein haben wir ein Feld sponsor in der package.json der Erweiterung eingeführt, damit Erweiterungen sich für das Sponsoring entscheiden können. Das sponsor-Objekt hat ein url-Feld für den Sponsoring-Link des Erweiterungsautors. Zum Beispiel:

"sponsor": {
    "url": "https://github.com/sponsors/nvaccess"
}

Wenn sich eine Erweiterung dafür entscheidet, rendert VS Code einen **Sponsor**-Button auf der Detailseite der Erweiterungsansicht, wie im Abschnitt Sponsoring von Erweiterungen oben gezeigt.

Hinweis: Stellen Sie sicher, dass Sie das neueste vsce-Kommandozeilentool (>=2.9.1) verwenden, um Ihre Erweiterung mit aktiviertem Sponsoring zu veröffentlichen.

Vorgeschlagene APIs

Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich, und Erweiterungsautoren können sie ausprobieren. Wie immer freuen wir uns über Ihr Feedback. Hier sind die Schritte, um eine vorgeschlagene API auszuprobieren:

  1. Suchen Sie nach einem Vorschlag, den Sie ausprobieren möchten, und fügen Sie dessen Namen zu package.json#enabledApiProposals hinzu.
  2. Verwenden Sie das neueste vscode-dts und führen Sie vscode-dts dev aus. Es lädt die entsprechenden d.ts-Dateien in Ihren Arbeitsbereich herunter.
  3. Sie können nun gegen den Vorschlag programmieren.

Sie können keine Erweiterung veröffentlichen, die eine vorgeschlagene API verwendet. Es kann zu Breaking Changes in der nächsten Version kommen und wir möchten niemals bestehende Erweiterungen beeinträchtigen.

Dateien aus DataTransfer lesen

Der neue API-Vorschlag dataTransferFiles ermöglicht es Erweiterungen, Dateien aus einem vscode.DataTransfer-Objekt zu lesen. Der Typ DataTransfer wird von der Tree-Drag-and-Drop-API sowie den Vorschlägen für Drag-and-Drop in Editoren und Copy-Paste-APIs verwendet.

export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {

  ...

   public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {

     // Get a list of all files
     const files: vscode.DataTransferFile[] = [];
     sources.forEach((item) => {
       const file = item.asFile();
       if (file) {
         files.push(file);
       }
     });

    const decoder = new TextDecoder();

    // Print out the names and first 100 characters of the file
     for (const file of files) {
       const data = await file.data();
       const text = decoder.decode(data);
       const fileContentsPreview = text.slice(0, 100);
       console.log(file.name + ' — ' + fileContentsPreview + '\n');
     }

    ...
  }
}

Datei-Datentransfer-Elemente werden derzeit nur dann zu DataTransfer hinzugefügt, wenn sie von außerhalb von VS Code stammen (z. B. wenn Sie vom Desktop in eine Baumansicht oder in den Editor ziehen und ablegen).

Copy-Paste-API

Der neue API-Vorschlag documentPaste ermöglicht es Erweiterungen, sich in das Kopieren und Einfügen in Texteditoren einzuhaken. Dies kann verwendet werden, um den beim Einfügen eingefügten Text zu ändern. Ihre Erweiterung kann auch Metadaten beim Kopieren von Text speichern und diese Metadaten beim Einfügen verwenden (z. B. um Importe beim Einfügen zwischen zwei Code-Dateien mitzunehmen).

Das Beispiel für eine Dokumenteinfügeerweiterung zeigt diese API in Aktion

/**
 * Provider that maintains a count of the number of times it has copied text.
 */
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
  private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';

  private count = 0;

  prepareDocumentPaste(
    _document: vscode.TextDocument,
    _range: vscode.Range,
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): void | Thenable<void> {
    dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
  }

  async provideDocumentPasteEdits(
    _document: vscode.TextDocument,
    range: vscode.Range,
    dataTransfer: vscode.DataTransfer,
    token: vscode.CancellationToken
  ) {
    const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
    if (!countDataTransferItem) {
      return undefined;
    }

    const textDataTransferItem = dataTransfer.get('text/plain') ?? dataTransfer.get('text');
    if (!textDataTransferItem) {
      return undefined;
    }

    const count = await countDataTransferItem.asString();
    const text = await textDataTransferItem.asString();

    // Build a snippet to insert
    const snippet = new vscode.SnippetString();
    snippet.appendText(`(copy #${count}) ${text}`);

    return new vscode.SnippetTextEdit(range, snippet);
  }
}

vscode.languages.registerDocumentPasteEditProvider(
  { language: 'markdown' },
  new CopyCountPasteEditProvider()
);

Neuer Notebook-Workspace-Edit-Vorschlag

Der neue API-Vorschlag notebookWorkspaceEdit ermöglicht es Erweiterungen, den Inhalt eines Notebooks zu bearbeiten. Er ersetzt den vorherigen Vorschlag notebookEditorEdit.

Mit dem Vorschlag können Sie Workspace-Edits erstellen, die Zellen in einem Notebook einfügen, ersetzen oder ändern

const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
  const edit = new vscode.WorkspaceEdit();

  edit.set(
    currentNotebook.uri,
    vscode.NotebookEdit.insertCells(/* index*/ 1, [
      // ... new notebook cell data
    ])
  );

  await vscode.workspace.applyEdit(edit);
}

Technik

Pull-Anfragen verwenden

Wir haben davon Abstand genommen, Änderungen direkt in den main-Branch des VS Code-Repositorys zu pushen, und pushen nun alle Änderungen ausschließlich über Pull-Anfragen (PRs) zu VS Code. Wir verlangen, dass jede PR mindestens eine Zustimmung von einem anderen Teammitglied erhält. Dies nutzend, verlangen wir nun auch, dass einige grundlegende Prüfungen bestanden werden, bevor eine PR zusammengeführt werden kann. Dies sind Aufgaben wie TypeScript-Kompilierung, Formatierungsregeln, Unit-Tests und Integrationstests, die in der Regel nicht länger als 10 Minuten dauern. Der Wechsel zu diesem Workflow hat die Anzahl der Fälle reduziert, in denen unser Insiders-Build aufgrund eines Programmierfehlers unterbrochen wurde.

VS Code OSS Build

Wir haben einen neuen öffentlichen Code OSS Build, der dieselben Build-Definitionen wie unsere Produktions-Builds wiederverwendet. Dieser Build läuft jetzt in unter 30 Minuten für jede PR, und wir planen, weiterhin in die Beschleunigung zu investieren.

Dokumentation

Aktualisiertes Video zur Versionskontrolle

Das Einführungs-Video "Git mit Visual Studio verwenden" wurde überarbeitet, um Ihnen den Einstieg in die in VS Code integrierte Git-Integration zu erleichtern.

Sie finden weitere großartige Videos auch auf dem VS Code YouTube-Kanal.

vscode.dev auf code.visualstudio.com

Möchten Sie VS Code für das Web nutzen, aber die URL vergessen? vscode.dev wird jetzt prominent auf der VS Code Download-Seite angezeigt, damit Sie schnell VS Code in Ihrem Browser starten können.

vscode.dev on the code.visualstudio.com download page

Bemerkenswerte Fehlerbehebungen

  • 141157 Das Drücken von F11 außerhalb des Debug-Modus aktiviert den Debugger, anstatt in den Vollbildmodus zu wechseln
  • 148864 Nicht gebundener Haltepunkt für TypeScript-Dateien
  • 149638 Schaltfläche zur verzögerten Auswertung von Variablen verursacht problematische Lücken und Fehlausrichtungen zwischen Knoten

Vielen Dank

Last but not least, ein großes Danke an die Mitwirkenden von VS Code.

Web-Erweiterungen

Erweiterungsautoren für die Ermöglichung von Erweiterungen, die Code als Web-Erweiterungen ausführen (die Liste unten bezieht sich auf den Zeitraum vom 2. Mai bis 6. Juni 2022)

Fehlerverfolgung

Beiträge zu unserer Fehlerverfolgung

Pull-Anfragen

Beiträge zu vscode

Beiträge zu vscode-extension-samples

Beiträge zu vscode-generator-code

Beiträge zu vscode-html-languageservice

Beiträge zu vscode-js-debug

Beiträge zu vscode-languageserver-node

Beiträge zu vscode-pull-request-github

  • @jpspringall: Issue #3371 | Updated getAuthSessionOptions für den Fall von GitHub Enterprise AuthProvider PR #3565

Beiträge zu debug-adapter-protocol

Beiträge zu language-server-protocol

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