Januar 2020 (Version 1.42)
Update 1.42.1: Das Update behebt diese Probleme.
Downloads: Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap
Willkommen zur Januar 2020-Version von Visual Studio Code. Diese Version enthält eine Reihe von Updates, die Ihnen hoffentlich gefallen werden. Hier sind einige der wichtigsten Highlights:
- Umbenennungsvorschau - Sehen Sie ausstehende Umbenennungen in einer Diff-Ansicht und akzeptieren oder lehnen Sie Änderungen einfach ab.
- Limit für offene Editoren - Legen Sie die maximale Anzahl gleichzeitig geöffneter Editoren fest.
- Platzierung des Panels - Verschieben Sie das Panel (Ausgabe, Terminal) nach links, rechts oder unter den Editor.
- Hervorhebung gefalteter Codebereiche - Finden Sie gefaltete Bereiche schnell mit neuer Hintergrundhervorhebung.
- Verbesserungen der Debug-Konsole - Syntaxhervorhebung, Klammerabgleich, Eingabeverlauf.
- Globale Aufgaben definieren - Aufgaben pro Benutzer können über alle Ihre Ordner und Arbeitsbereiche hinweg verwendet werden.
- Java-Erweiterungsupdates - Java-Unterstützung für Daten-Breakpoints und die Call Hierarchy-Ansicht.
- Remote-Entwicklung - Neue Ansicht "Forwarded Ports" zum Zuordnen von SSH- und Container-Ports.
- Neue Container-Tutorials - Erfahren Sie, wie Sie Docker-Container erstellen und bereitstellen.
- Vorschau-Funktionen - Erste Einblicke in die Timeline-Ansicht, den Sucheditor, semantische Hervorhebung und mehr.
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 sehen? Sie können die nächtliche Insiders-Build herunterladen und die neuesten Updates ausprobieren, sobald sie verfügbar sind. Und für die neuesten Nachrichten, Updates und Inhalte zu Visual Studio Code folgen Sie uns auf Twitter @code!
Workbench
Umbenennungsvorschau
Visual Studio Code ermöglicht Ihnen nun die Vorschau von Umbenennungsänderungen. Bei der Umbenennung können Sie einen neuen Namen über ⌘Enter (Windows, Linux Ctrl+Enter) bestätigen und das Panel Refactor Preview anzeigen. Es zeigt ausstehende Änderungen in einem Diff-Editor an und ermöglicht Ihnen, einzelne Änderungen zu deaktivieren/aktivieren. Sobald die Umbenennung angewendet (oder abgebrochen) wurde, schließen sich der Diff-Editor und das Vorschaufenster, sodass Sie wieder zum aktuellen Editor zurückkehren.

Theme: GitHub Sharp, Schriftart: FiraCode
Limit für offene Editoren
Es gibt neue Einstellungen, um die maximale Anzahl gleichzeitig geöffneter Editoren zu begrenzen.
workbench.editor.limit.enabled: Aktiviert diese Funktion (standardmäßig deaktiviert).workbench.editor.limit.perEditorGroup: Ob das Limit pro Editor-Gruppe oder über alle Gruppen hinweg angewendet werden soll.workbench.editor.limit.value: Die maximale Anzahl offener Editoren (standardmäßig 10).
Wenn diese Funktion aktiviert ist, schließt VS Code den zuletzt verwendeten Editor, wenn Sie einen neuen Editor öffnen.
Unten sehen Sie das Verhalten, wenn das Limit auf 3 gesetzt ist.

Theme: Nord
Hinweis: Geänderte Editoren (Dateien mit ungespeicherten Änderungen) werden niemals automatisch geschlossen, zählen aber dennoch zur Gesamtzahl der offenen Editoren.
Verbesserungen bei nicht gespeicherten Editoren
Nicht gespeicherte Editoren in VS Code sind Textpuffer, die noch nicht auf der Festplatte gespeichert wurden. Sie können diese so lange geöffnet lassen, wie Sie möchten, und alle Textinhalte werden zwischen Neustarts gespeichert und wiederhergestellt.
Titel für nicht gespeicherte Editoren
In der Vergangenheit erhielten nicht gespeicherte Editoren generische Namen wie Untitled-1, aufsteigend gezählt. In dieser Version verwenden nicht gespeicherte Editoren den Inhalt der ersten Zeile des Dokuments als Titel des Editors und fügen den generischen Namen als Beschreibung hinzu.

Theme: Nord
Hinweis: Wenn die erste Zeile leer ist oder keine Wörter enthält, wird der Titel wie bisher auf Untitled-* zurückfallen.
Standard-Sprachmodus
Standardmäßig haben nicht gespeicherte Dateien keinen spezifischen Sprachmodus konfiguriert. VS Code verfügt über eine Einstellung, files.defaultLanguage, um eine Standardsprache für nicht gespeicherte Dateien zu konfigurieren. Mit dieser Version kann die Einstellung einen neuen Wert {activeEditorLanguage} annehmen, der dynamisch den Sprachmodus des aktuell aktiven Editors anstelle eines festen Standards verwendet.
Darüber hinaus wird, wenn Sie Text in einen nicht gespeicherten Editor kopieren und einfügen, der Sprachmodus des nicht gespeicherten Editors automatisch geändert, wenn der Text aus einem VS Code-Editor kopiert wurde.

Theme: One Dark Pro
Hinweis: Wenn für den nicht gespeicherten Editor bereits ein Sprachmodus angegeben ist, wird das Einfügen von Text diesen nicht ändern.
Navigation zu zuletzt verwendeten Editoren
Mit dieser Version gibt es nun eine Liste der zuletzt verwendeten (MRU) Editoren über alle Editor-Gruppen hinweg. Ein Editor gilt als zuletzt verwendet, wenn er als aktiver Editor geöffnet wird oder wenn er zum neuen aktiven Editor wird, falls er bereits geöffnet war. Sobald ein Editor geschlossen wird, wird er aus dieser Liste entfernt.
Eine Anwendung dieser Liste ist der neue edt mru-Picker, den Sie über den neuen Befehl Ansicht: Alle Editoren nach zuletzt verwendet anzeigen (workbench.action.showAllEditorsByMostRecentlyUsed) öffnen können.

Sie können Tastenkombinationen hinzufügen, um in diesem Picker schnell zu navigieren, ohne die Maus zu verwenden. Zum Beispiel ist unten eine Tastenkombination angegeben, damit Ctrl+Tab und Ctrl+Shift+Tab über Editoren aller Gruppen navigieren (anstelle von nur innerhalb der aktiven Gruppe, wie es die Standard-Tastenkombinationen tun).
[
{
"key": "ctrl+tab",
"command": "workbench.action.quickOpenPreviousRecentlyUsedEditor",
"when": "!inEditorsPicker"
},
{
"key": "ctrl+shift+tab",
"command": "workbench.action.quickOpenLeastRecentlyUsedEditor",
"when": "!inEditorsPicker"
}
]
Wenn Sie die Liste ohne Picker navigieren möchten, gibt es neue Befehle:
- Ansicht: Nächsten zuletzt verwendeten Editor öffnen (
workbench.action.openNextRecentlyUsedEditor) - Ansicht: Vorherigen zuletzt verwendeten Editor öffnen (
workbench.action.openPreviousRecentlyUsedEditor)
Um zu unterscheiden, welche Befehle zur Editor-Navigation mit einem Picker funktionieren und welche nicht, hat sich das Verhalten einiger bestehender Befehle geändert. Insbesondere verwenden die Befehle Zuletzt verwendeter Editor in Gruppe keine Picker mehr.
- Ansicht: Nächsten zuletzt verwendeten Editor in Gruppe öffnen (
workbench.action.openNextRecentlyUsedEditorInGroup) - Ansicht: Vorherigen zuletzt verwendeten Editor in Gruppe öffnen (
workbench.action.openPreviousRecentlyUsedEditorInGroup)
Für die Picker-basierte Navigation verwenden Sie:
- Ansicht: Zuletzt verwendeten Editor in Gruppe schnell öffnen (
workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup) - Ansicht: Am wenigsten zuletzt verwendeten Editor in Gruppe schnell öffnen (
workbench.action.quickOpenLeastRecentlyUsedEditorInGroup)
Verschieben des Panels
Das Panel, das die Bereiche Ausgabe, Debug-Konsole, Terminal und Probleme enthält, kann nun auf die linke Seite des Editors verschoben werden.
Der Befehl Ansicht: Panel-Position umschalten (workbench.action.togglePanelPosition) wurde zugunsten der folgenden neuen Befehle entfernt:
- Ansicht: Panel nach links verschieben (
workbench.action.positionPanelLeft) - Ansicht: Panel nach rechts verschieben (
workbench.action.positionPanelRight) - Ansicht: Panel nach unten verschieben (
workbench.action.positionPanelBottom)
Alle Fenster beim Neustart wiederherstellen
Die Einstellung von VS Code zum Wiederherstellen von Fenstern beim Start wurde geändert, um standardmäßig alle Fenster wiederherzustellen. Wenn Sie zum vorherigen Verhalten zurückkehren möchten, konfigurieren Sie "window.restoreWindows": "one", um nur ein einzelnes Fenster zu öffnen.
Auflösung von Speicherproblemen
VS Code verfügt über einen integrierten Mechanismus, um eine Benachrichtigung anzuzeigen, wenn Sie versuchen, eine geänderte Datei zu speichern, die außerhalb von VS Code oder von einem anderen Programm (z.B. Git) geändert wurde.

Die Motivation ist, Sie darüber zu informieren, dass das Speichern den Inhalt auf der Festplatte überschreiben wird, auch wenn die Datei nach dem Ändern der Datei geändert wurde. Die Auswahl der Schaltfläche Vergleichen ermöglicht es Ihnen, Ihre Änderungen zusammen mit der Version auf der Festplatte zu überprüfen und die Datei entweder zu überschreiben oder zurückzusetzen.
In Fällen, in denen Sie wissen, dass die Änderungen auf der Festplatte überschrieben werden können, gibt es nun eine Schaltfläche Überschreiben direkt in der Benachrichtigung. Sie können files.saveConflictResolution auch global, pro Arbeitsbereich oder pro Dateityp konfigurieren, um dieses Verhalten ganz zu deaktivieren. Die Optionen sind askUser (Standard) oder overwriteFileOnDisk.
Umgang mit langsamen Speicheroperationen
VS Code ermöglicht es Erweiterungen, den Inhalt einer Datei beim Speichern auf der Festplatte zu ändern. Features wie Formatieren beim Speichern und Reparieren beim Speichern sind Beispiele. Das Speichern ist jedoch eine kritische Operation und Erweiterungen, die während des Speichervorgangs verarbeiten, müssen schnell fertig werden, damit die eigentliche Speicheroperation fortgesetzt werden kann. "Schnell" wurde früher von VS Code erzwungen, wobei VS Code Erweiterungsspeicheroperationen nach einem Timeout abbrach. Diese Durchsetzung garantierte schnelles Speichern, konnte aber frustrierend sein, da manchmal erwartete Verarbeitung nicht stattfand.
Mit dieser Version haben wir den zeitbasierten Ansatz aufgegeben und zeigen stattdessen eine Fortschrittsbenachrichtigung an, die es Ihnen ermöglicht, Erweiterungen, die am Speichern beteiligt sind ("Save Participants"), abzubrechen. Die Benachrichtigung informiert Sie, dass Speicheroperationen ausgeführt werden und Sie entscheiden können, ob Sie darauf warten möchten, dass ein Speicherteilnehmer fertig wird oder nicht.

Theme: Light+
Quellcodeverwaltung-Eingabe
Die Eingabebox in der Quellcodeverwaltungsansicht verwendet nun den Monaco Editor. Der Monaco Editor unterstützt nützliche Funktionen wie Mehrfach-Cursor und Befehle zum Verschieben/Kopieren von Zeilen.
Zweistufiges Einklappen im Multi-Root Explorer
Wenn Sie einen Multi-Root-Arbeitsbereich verwenden, hat die Schaltfläche Ordner einklappen im Dateiexplorer nun ein zweistufiges Verhalten. Der erste Klick klappt alle Ordner innerhalb jedes Top-Levels ein, und der zweite Klick klappt die Top-Level-Ordner ein. Die Suchansicht hat dieses Verhalten bereits.

Theme: Monokai
Automatischer Themenwechsel basierend auf dem Betriebssystem-Farbschema
Windows und macOS unterstützen jetzt helle und dunkle Farbschemata. Es gibt eine neue Einstellung, window.autoDetectColorScheme, die VS Code anweist, auf Änderungen des Farbschemas des Betriebssystems zu reagieren und entsprechend zu einem passenden Thema zu wechseln.
Um die Themen anzupassen, die verwendet werden, wenn sich ein Farbschema ändert, können Sie das bevorzugte helle und dunkle Thema mit den Einstellungen festlegen:
workbench.preferredLightColorThemeworkbench.preferredDarkColorTheme
Editor
Fokus der Peek-Ansicht steuern
Es gibt eine neue Einstellung und einen Befehl, um zu steuern, wo die Peek-Ansicht den Fokus anfangs platziert. Standardmäßig fokussiert Peek den Baum auf der rechten Seite, damit Sie schnell zu Referenzen navigieren können. Der anfängliche Fokus auf dem Baum ist nicht optimal für Personen, die Peek zum schnellen Ändern von Code im Editor verwenden möchten. Sie können Ihre Präferenz nun mit der Einstellung editor.peekWidgetDefaultFocus definieren, die auf editor oder tree gesetzt werden kann. Es gibt auch einen neuen Befehl togglePeekWidgetFocus (⌘K F2 (Windows, Linux Ctrl+K F2)), mit dem Sie zwischen dem Peek-Editor und dem Baum wechseln können.
Hervorhebung gefalteter Bereiche
Gefaltete Codebereiche sind nun mit einer Hintergrundhervorhebung leichter zu entdecken.

Theme: Dark+
Die Funktion wird durch die Einstellung editor.foldingHighlight gesteuert und die Farbe kann mit der Farbe editor.foldBackground angepasst werden.
"workbench.colorCustomizations": {
"editor.foldBackground": "#355000"
}
Verfeinerungen beim Falten
Shift + Klick einmal auf den Faltungsindikator, um zuerst die inneren Bereiche einzuklappen. Shift + Klick erneut (wenn alle inneren Bereiche bereits eingeklappt sind) klappt das Elternteil ein. Shift + Klick erneut klappt alles auf.

Wenn der Befehl Einklappen (⌥⌘[ (Windows, Linux Ctrl+Shift+[)) auf einen bereits eingeklappten Bereich angewendet wird, wird der nächste ausgeklappte übergeordnete Bereich eingeklappt.
Neue Option für Zeilenumbrüche
Standardmäßig berechnet der Editor Wortumbruchbrüche unter der Annahme, dass alle Zeichen die gleiche Breite haben. Diese Annahme ermöglicht dem Standardalgorithmus, schnell zu sein, aber seine Ergebnisse sind schlecht, wenn eine nicht-monospaced Schriftart verwendet wird oder wenn Text in einem Skript geschrieben wird, bei dem die Zeichen unterschiedliche Breiten haben. Es gibt eine neue Einstellung, editor.wrappingStrategy, die auf advanced gesetzt werden kann, damit der Editor die Wortumbruchberechnung an den Browser delegiert.
Barrierefreiheit
Verbesserungen am Suggest-Widget
Das Vorschlags-Widget verwendet nun keine ARIA-Warnungen mehr und zeigt dem Screenreader ordnungsgemäß an, dass es fokussiert ist. Dies sollte verhindern, dass der Screenreader versehentlich stört.
editor.accessibilityPageSize auf 160 gesetzt, wenn Screenreader erkannt wird
Die Einstellung editor.accessibilityPageSize steuert die Anzahl der Zeilen im Editor, die von einem Screenreader gleichzeitig vorgelesen werden können. Es gibt jedoch Leistungseinbußen bei der Verwendung eines großen Wertes. Wir haben beschlossen, den Wert automatisch auf 160 Zeilen zu setzen, wenn wir einen Screenreader erkennen (und nicht mehr wegen eines NVDA-Fehlers).
Barrierefreiheit unter Linux mit Orca
Wir haben begonnen, VS Code unter Linux mit dem Orca-Screenreader barrierefrei zu machen. Da diese Arbeit jedoch Electron 7 erfordert, erwarten wir, dass wir in der nächsten stabilen Version weitere Fortschritte erzielen werden. In der Zwischenzeit können Sie für die Barrierefreiheit unter Linux unsere Insiders-Version nutzen und Feedback geben.
Integriertes Terminal
Scrolling-Empfindlichkeit
Die Scrolling-Empfindlichkeit des Terminals kann nun unabhängig vom Editor über die neuen Einstellungen konfiguriert werden:
terminal.integrated.mouseWheelScrollSensitivity- Multiplikator für Mausrad-Scrolling (Standard ist 1).terminal.integrated.fastScrollSensitivity- Multiplikator für schnelles Scrollen bei gedrückter Alt-Taste (Standard ist 5).
Debugging
Vereinfachte Debug-Ansicht beim Start
Um den Einstieg in die Debug-Ansicht zu vereinfachen, zeigt VS Code nun nur noch eine Schaltfläche Ausführen und Debuggen an. Die Aktion Ohne Debugging ausführen (die nicht von allen Debuggern unterstützt wird) ist weiterhin im Hauptmenü "Debuggen" verfügbar.
Basierend auf Benutzerfeedback wird der Breakpoints-Bereich in der Startansicht angezeigt, wenn Sie mindestens einen Breakpoint gesetzt haben.

Verbesserungen der Debug-Konsole
Eingabe in der Debug-Konsole
Die Eingabe in der Debug-Konsole verwendet nun den Sprachmodus des aktuell aktiven Editors. Dies bedeutet, dass die Eingabe in der Debug-Konsole Syntaxfärbung, Einrückung, automatisches Schließen von Anführungszeichen und andere Sprachfeatures unterstützt.

Darstellung von Eingaben und Ausgaben
Wir haben die Darstellung von Eingaben und Ausgaben in der Debug-Konsole optimiert, um sie besser unterscheidbar zu machen. VS Code zeigt einen Pfeil nur neben dem Eingabeausdruck an.

Vorschläge für den Eingabeverlauf der Debug-Konsole
Die Eingabebox der Debug-Konsole schlägt nun automatisch zuvor eingegebene Einträge vor. Das Textsymbol wird verwendet, um die Vorschläge des Verlaufs von anderen IntelliSense-Einträgen zu unterscheiden.

Debug-Konsole nach dem Debuggen ausblenden
Es gibt eine neue Einstellung debug.console.closeOnEnd, die steuert, ob die Debug-Konsole nach Beendigung des Debuggings automatisch geschlossen werden soll.
Unterstützung für console.table(...)
Die Debug-Konsole kann nun Ausgaben anzeigen, die von der Node.js console.table(...) API stammen.

Verbesserungen der Ansicht "Geladene Skripte"
Die Ansicht "Geladene Skripte" wurde aktualisiert, um die neue Baumansicht von VS Code zu verwenden. Sie rendert nun einzelne Kindordner im gleichen kompakten Format wie der Dateiexplorer von VS Code. Zusätzlich ist es nun möglich, den Baum beim Tippen zu durchsuchen und zu erweitern.

Wir planen, den Befehl Debuggen: Geladene Skripte öffnen in der nächsten Version zu entfernen, da er die "Suchen und Erweitern beim Tippen"-Funktionalität des Baums dupliziert.
Sortierung und Gruppierung von Startkonfigurationen
Startkonfigurationen und Compounds unterstützen nun ein neues strukturiertes Attribut presentation. Mithilfe der Attribute order, group und hidden können Sie Konfigurationen und Compounds im Dropdown-Menü der Debug-Konfiguration und in der Debug-Schnellauswahl sortieren, gruppieren und ausblenden.
Zum Beispiel kann eine Startkonfiguration in launch.json das folgende presentation-Feld haben:
"presentation": {
"group": "5_tests",
"order": 10,
"hidden": false
}
Als Beispiel haben wir Präsentationen zu einigen Startkonfigurationen von VS Code selbst hinzugefügt, um sie sinnvoller zu gruppieren und Konfigurationen auszublenden, die nur Teil einer Compound-Startkonfiguration sind.

Debug-Aktivitätsleistensymbol und Dekoration
Basierend auf Benutzerfeedback haben wir unser Debug-Symbol in der Aktivitätsleiste aktualisiert, um Ausführen und Debuggen besser darzustellen. Und während des Debuggens gibt es eine Zahlen-Dekoration auf dem Debug-Symbol, um die Anzahl der aktiven Debug-Sitzungen anzuzeigen.

Aufgaben
Aufgaben auf Benutzerebene
In tasks.json deklarierte Aufgaben werden nun auf Ebene der Benutzereinstellungen unterstützt. Wenn Sie ein Build-Skript haben, das Sie über viele Projekte hinweg verwenden, oder wenn Ihre Aufgaben nicht in einem Projektordner liegen sollen, können Sie Ihre Aufgaben in der Benutzereinstellungsdatei tasks.json hinzufügen. Führen Sie den Befehl Aufgaben: Benutzereinstellungen öffnen aus, um Aufgaben auf Benutzerebene zu erstellen. Diese Aufgaben sind dann über alle Ordner und Arbeitsbereiche hinweg verfügbar. Nur die Aufgabentypen shell und process werden hier unterstützt.
Label für pickString-Eingabe
Wenn Sie Task-inputs verwenden, können Sie den pickString-Eingabeoptionen ein benutzerfreundliches Label hinzufügen.
"inputs": [
{
"id": "pickAnInputValue",
"description": "Pick a Value",
"type": "pickString",
"options": [
"first-value",
{
"label": "Second Value",
"value": "second-long-value-that-can-be-simplified-for-display"
}
],
"default": "first-value"
}
]
Das Label wird wie folgt angezeigt:

Sprachen
TypeScript 3.7.5
Wir haben unsere gebündelte TypeScript-Version auf 3.7.5 aktualisiert. Dieses kleine Update enthält einige wichtige Fehlerbehebungen, darunter die Behebung von IntelliSense für Projekte, die unter Windows nicht auf C:-Laufwerken gespeichert sind.
HTML-Spiegel-Cursor standardmäßig deaktiviert
Der HTML-Spiegel-Cursor (Mirror Cursor) ist nun eine Opt-in-Funktion. In der kommenden Iteration werden wir die Implementierung weiter verbessern, um diese Funktion leichter verständlich und für mehr Sprachen verfügbar zu machen. Sie können diese Funktion weiterhin nutzen, indem Sie html.mirrorCursorOnMatchingTag aktivieren.
Vorschau-Funktionen
Vorschau-Features sind noch nicht zur Veröffentlichung bereit, aber funktionsfähig genug, um sie zu nutzen. Wir freuen uns über Ihr frühes Feedback, während sie sich in der Entwicklung befinden.
Timeline-Ansicht
In diesem Meilenstein haben wir Fortschritte bei der neuen Timeline-Ansicht erzielt und eine frühe Vorschau zu teilen. Dies ist eine einheitliche Ansicht zur Visualisierung von Zeitreihenereignissen (z.B. Git-Commits, Dateispeicherungen, Testläufe usw.) für eine Ressource (Datei, Ordner). Um die Timeline-Ansicht zu aktivieren, müssen Sie die Insiders-Edition verwenden und dann die folgende Einstellung hinzufügen:
"timeline.showView": true
Unten sehen Sie die Timeline-Ansicht, die die Git-Commit-Historie einer Datei anzeigt.

Theme: Dark Amethyst
In dieser frühen Vorschau zeigt die Timeline-Ansicht die Git-Commit-Historie des aktiven Dokuments, was derzeit auf 32 Einträge beschränkt ist. Das Auswählen eines dieser Commits öffnet eine Diff-Ansicht der durch diesen Commit eingeführten Änderungen. Erweiterungen werden auch in der Lage sein, eigene Zeitachsenquellen beizutragen, die in dieser einheitlichen Zeitachsenansicht angezeigt werden. Letztendlich werden Sie auch auswählen können (filtern), welche Quellen Sie in der Ansicht sehen möchten.
Bleiben Sie gespannt, wir haben noch viel mehr für diese neue Funktion geplant. Sie können uns folgen, indem Sie Issue #84297 abonnieren und nach Issues mit dem Label 'timeline' Ausschau halten. Und wenn Sie Ideen für andere Arten von Informationen haben, die Sie in dieser Ansicht sehen möchten, lassen Sie es uns wissen!
Such-Editor
Wir haben die Arbeit an unserem neuen Sucheditor fortgesetzt, mit dem Ziel dieser Iteration, dass der Sucheditor die primäre Sucherfahrung darstellt. Zu diesem Zweck haben wir eine Benutzeroberfläche zur Konfiguration der Sucheditor-Abfrage implementiert.

Theme: Noctis Lilac, Schriftart: Hasklig
Es gibt nun mehrere Befehle für den Sucheditor, die Sie Tastenkombinationen Ihrer Wahl zuweisen können:
search.action.openNewEditor: Öffnet einen neuen Sucheditor in der aktiven Editorgruppe.search.action.openInEditor: Kopiert die aktuellen Suchergebnisse in einen neuen Sucheditor.
Weitere Informationen und zukünftige Updates zum Sucheditor finden Sie in Issue #23931.
Hinweis: Sucheditoren sind standardmäßig in Insiders aktiviert und können in Stable durch Setzen von search.enableSearchEditorPreview auf true aktiviert werden.
Semantische Hervorhebung für TypeScript & JavaScript
Die semantische Hervorhebungsunterstützung für TypeScript und JavaScript ist in Entwicklung und noch nicht standardmäßig aktiviert. Sie können sie ausprobieren, indem Sie die folgende Einstellung hinzufügen:
"editor.semanticHighlighting.enabled": true
Wenn aktiviert, sehen Sie, dass einige Bezeichner neue Farben und Stile haben und nun entsprechend ihres aufgelösten Typs hervorgehoben werden. Die Standard-Syntax (TextMate)-Hervorhebung klassifiziert viele Tokens als variablen, und diese werden nun in Namespaces, Klassen, Parameter usw. aufgelöst.
Dies lässt sich am besten im Importbereich erkennen, wo nun jedes importierte Symbol mit dem Typ des Symbols gefärbt ist.

Sie können den Befehl Entwickler: Editor-Tokens und Bereiche inspizieren verwenden, um die semantischen und Syntax-Tokens zu inspizieren, die für jeden Speicherort berechnet werden.
Neuer JavaScript-Debugger
Wir haben an einem neuen Debugger für Node.js und Chrome gearbeitet. Er ist standardmäßig in Insiders installiert und kann aus dem Marketplace in VS Code Stable installiert werden. Sie können ihn mit Ihren vorhandenen Startkonfigurationen verwenden, indem Sie die Einstellung debug.javascript.usePreview aktivieren. Hier sind einige der neuen Funktionen, die wir diesen Monat hinzugefügt haben.
Der neue JS-Debugger debuggt automatisch Befehle, die Sie im neuen JavaScript Debug-Terminal ausführen, das Sie über den Befehl Debuggen: JavaScript Debug-Terminal erstellen öffnen können.

Theme: Earthsong, Font: Fira Code
Der neue Debugger bietet außerdem ein Debuggen CodeLens im Abschnitt scripts Ihrer package.json, mit dem Sie Skripte ohne zusätzliche Konfiguration ausführen und debuggen können.

Die Sichtbarkeit und Position (oben oder inline) des CodeLens kann über die Einstellung debug.javascript.codelens.npmScripts konfiguriert werden.
Probieren Sie es aus! Sie können Probleme im Repository vscode-js-debug melden, wenn Sie Probleme mit dem neuen Debugger haben.
Verschieben von Ansichten von der Seitenleiste zum Panel
Es wird aktiv daran gearbeitet, die Anpassung des Layouts von VS Code zu erleichtern. Sie können die Fortschritte mit der Einstellung testen:
"workbench.view.experimental.allowMovingToNewContainer": true
Wenn die Einstellung aktiviert ist, haben einige Ansichten einen neuen Kontextmenüeintrag, um sie zwischen der Seitenleiste und dem Panel zu verschieben. Derzeit wirkt sich diese Einstellung nur auf die Gliederungsansicht im Explorer und von Erweiterungen beigesteuerte Ansichten aus. Sie können diese Ansichten auch nicht im Panel kombinieren, wie Sie es in der Seitenleiste tun können.

Theme: LaserWave, Schriftart: Cascadia Code
Dies ist nur eine Vorschau der Funktionen und viele Aspekte davon werden sich wahrscheinlich ändern, einschließlich der oben genannten Einschränkungen. Schauen Sie sich gerne weitere Fortschritte in unserer Insiders-Version an.
Hinweis zu Suchen: Mit der neuen, verallgemeinerten Methode zum Verschieben von Ansichten werden die alte Sucheinstelllung search.location und der Befehl Suche: Suchansichtposition umschalten (search.action.toggleSearchViewPosition) veraltet sein. Ihre Einstellungen werden automatisch migriert, aber Sie müssen die neue, verallgemeinerte Methode verwenden, um die Suchansicht zukünftig zu verschieben. Sie müssen die experimentelle Vorschau-Einstellung oben nicht aktivieren, um die Suchansicht mit dem neuen Kontextmenüeintrag zu verschieben.
Unterstützung für TypeScript 3.8 Beta
Obwohl VS Code TypeScript 3.8 erst im nächsten Monat mit der offiziellen Veröffentlichung bündeln wird, haben wir in dieser Iteration Unterstützung für alle spannenden neuen TypeScript 3.8-Beta-Funktionen hinzugefügt.
Dazu gehören:
- IntelliSense und Syntaxhervorhebung von privaten Feldern in JavaScript- und TypeScript-Dateien.
- Call Hierarchy-Unterstützung für JavaScript und TypeScript.
- Die Refactoring-Funktion "Konvertieren in Template-String"!
Sie können all diese neuen TypeScript 3.8-Features noch heute ganz einfach ausprobieren, indem Sie die TypeScript Nightly-Erweiterung installieren. Bitte geben Sie uns Feedback und lassen Sie uns wissen, wenn Sie auf Fehler im TypeScript 3.8 Beta stoßen!
Beiträge zu Erweiterungen
Java-Debugger unterstützt Daten-Breakpoints
Die Erweiterung Debugger for Java unterstützt nun Daten-Breakpoints, die in VS Code 1.38 eingeführt wurden. Diese Funktion ermöglicht es Ihnen, Breakpoints zu erstellen, die ausgelöst werden, wenn sich der Wert einer Variablen ändert.
Unten sehen Sie, wie der Debugger stoppt, wenn sich der String Owner.telephone ändert.

Java Call Hierarchy-Ansicht
Die Erweiterung Language Support for Java unterstützt nun eine Call Hierarchy-Ansicht, die alle Aufrufe von oder zu einer Funktion anzeigt und es Ihnen ermöglicht, in Aufrufer von Aufrufern und Aufrufe von Aufrufen einzutauchen.
Klicken Sie mit der rechten Maustaste auf ein Symbol und wählen Sie Peek > Peek Call Hierarchy, um die Aufrufhierarchie anzuzeigen.

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.
Funktions-Highlights in 1.42 beinhalten:
- Remote - SSH: Verbesserte Unterstützung für Windows-Server, einschließlich automatischer Betriebssystemerkennung.
- WSL: Unterstützung für Im Explorer anzeigen, um den Windows Explorer für WSL-Ressourcen zu öffnen.
- Dev-Container: Vorkompilierte Container-Images, die Abhängigkeiten wie Git und zsh enthalten.
- Forwarded Ports-Ansicht: Mappen, anzeigen und wiederverwenden von SSH- und Container-Ports.
Sie können sich über neue Erweiterungsfunktionen und Fehlerbehebungen in den Remote Development Release Notes informieren.
Erweiterungs-Authoring
Codicons zur Wiederverwendung
Für die meisten VS Code-Icons wird die Codicon-Schriftart verwendet. Erweiterungen können diese Icons nun auf einfache und deklarative Weise wiederverwenden.
- Der Typ
vscode.ThemeIconkann nun mit dem Namen eines Codicons instanziiert werden. Zum Beispielnew vscode.ThemeIcon("zap"). - Der Typ
vscode.MarkdownStringunterstützt nun die Inline-Syntax$(<name>). Zum BeispielmyMdString.appendMarkdown('Hello $(globe)');. Beachten Sie, dass Sie, um Codicons innerhalb vonMarkdownStringzu verwenden, das KonstruktorargumentsupportThemeIconsaktivieren müssen. commands, die in derpackage.json-Datei einer Erweiterung definiert sind, können nun ein Codicon für ihr Symbol verwenden. Verwenden Sie die Inline-Syntax, z. B."icon": "$(zap)".
![]()
Theme: Light+
Das obige Hover-Beispiel rendert jedes verfügbare Codicon. Der Hover wurde mit dem folgenden Snippet erstellt, aber zur besseren Lesbarkeit wurden die meisten Codicon-Namen aus der all-Konstante entfernt.
vscode.languages.registerHoverProvider(
'*',
new (class implements vscode.HoverProvider {
provideHover(doc: vscode.TextDocument, pos: vscode.Position) {
const all = `$(activate-breakpoints)$(add)...$(zoom-out)`;
const md = new vscode.MarkdownString(all, true);
return new vscode.Hover(md, doc.getWordRangeAtPosition(pos));
}
})()
);
Einfügen und Ersetzen für Vervollständigungselemente
Vervollständigungen, die am Ende eines Wortes ausgelöst werden, ersetzen normalerweise dieses Wort. Wenn Vervollständigungen jedoch innerhalb von Wörtern ausgelöst werden, ist nicht klar, ob das Wortende ersetzt werden soll oder nicht. Je nach Präferenz des Erweiterungsautors erhalten Benutzer das eine oder das andere Verhalten. Das ist nicht ideal und jetzt gibt es eine API, um die Einfüge- und Ersetzungsbereiche für ein Vervollständigungselement auszudrücken.
Dazu haben wir einen neuen OR-Typ zu CompletionItem#range hinzugefügt:
export class CompletionItem {
range?: Range | { inserting: Range; replacing: Range };
//...
}
- Wenn der Bereich
undefinedist, verwendet VS Code den aktuellen Wortbereich zum Ersetzen und denselben Bereich, der auf die Cursorposition zugeschnitten ist, zum Einfügen. - Wenn der Bereich ein einfaches
vscode.Rangeist, dann weiß VS Code, dass es nur einen Ort zum Einfügen oder Ersetzen gibt. - Wenn der Bereich ein Objekt mit Einfüge- und Ersetzungsbereichen ist, verwendet VS Code diese direkt.
Diese Informationen werden in Kombination mit der Einstellung editor.suggest.insertMode verwendet, die es Benutzern ermöglicht, ihre Präferenz festzulegen. Wir bitten Erweiterungsautoren, diese API schnell zu übernehmen, da wir planen, das Einfüge- und Ersetzungsverhalten in der nächsten Version sichtbarer zu machen.
Verfeinerter CallHierarchyProvider
Wir haben eine kleine Änderung an CallHierarchyProvider#prepareCallHierarchy vorgenommen, damit dieser nun ein oder mehrere CallHierarchyItem-Elemente zurückgeben kann. Die Option many ist nützlich, wenn die Aufrufhierarchie für ein Element abgefragt wird, das mehrere Überladungen hat.
Erstellungsoptionen für Terminals
Das Terminal-Objekt hat eine neue Eigenschaft creationOptions, die von Erweiterungen verwendet werden kann, um zu identifizieren, wie das Terminal erstellt wurde.
Sprachspezifische Einstellungen
Erweiterungen können nun Einstellungen beisteuern, die sprachspezifisch überschreibbar sind, mithilfe des neuen Konfigurationsbereichs language-overridable.
Beispiel
"contributes": {
"configuration": {
"title": "sample",
"properties": {
"sample.languageSetting": {
"type": "boolean",
"scope": "language-overridable"
}
}
}
}
Die Konfigurations-API wird erweitert, um diese Einstellungen zu unterstützen. Sie können diese Einstellungen über die API lesen und aktualisieren, indem Sie die erforderliche languageId übergeben.
Beispiel
/**
* Read language configuration.
*/
const textDocumentConfiguration = vscode.workspace.getConfiguration('sample', {resource, languageId});
textDocumentConfiguration.get('languageSetting');
/**
* Override configuration under language
*/
textDocumentConfiguration.update('languageSetting', false, ConfigurationTarget.Global, true);
/**
* Listen language configuration changes
*/
workspace.onDidChangeConfiguration(e => {
if(e.affectsConfiguration('sample.languageSetting', {resource, languageId}) {
}
});
Weitere Informationen finden Sie in der Configuration API.
Erweiterungsansicht Kontextmenü
Sie können nun Befehle zum Kontextmenü einer Erweiterung in der Erweiterungsansicht beisteuern, indem Sie den neuen Menüort extension/context verwenden.
Beispiel
"contributes": {
"commands": [
{
"command": "extension.helloWorld",
"title": "Hello World"
}
],
"menus": {
"extension/context": [
{
"command": "extension.helloWorld",
"group": "2_configure",
"when": "extensionStatus==installed",
}
]
}
}

Die ID der Erweiterung wird als Argument übergeben, wenn der Befehl ausgeführt wird.
Beispiel
vscode.commands.registerCommand('extension.helloWorld', extensionId => {
vscode.window.showInformationMessage(extensionId);
});
Die folgenden vordefinierten Kontexte werden unterstützt, die Sie in when-Bedingungen für den Befehl verwenden können:
extensionStatus==installedisBuiltinExtension
DebugConfigurationProvider Hook für den Zugriff auf substituierte Variablen
Die Debug-Erweiterungs-API bietet einen Hook resolveDebugConfiguration im DebugConfigurationProvider, der verwendet werden kann, um eine Debug-Konfiguration zu validieren, bevor sie an den Debug-Adapter übergeben wird. Da dieser Hook vor der Variablensubstitution aufgerufen wird, kann der Validierungscode leicht weitere Variablen zur Debug-Konfiguration hinzufügen und diese dann rechtzeitig substituieren lassen.
Dieser Ansatz kann die Verwendung der aufgelösten Variablenwerte im resolveDebugConfiguration-Hook erschweren, z.B. zur Validierung oder Implementierung von Funktionalität, die nur in der Erweiterung existiert (und nicht im Debug-Adapter, wo die substituierten Werte verfügbar sind). Siehe Issue #85206 für ein Beispiel. Einige Erweiterungen haben begonnen, Variablen selbst zu substituieren (was oft unvollständig ist, da es nicht alle Fälle abdeckt).
Aus Benutzersicht ist das verwirrend. In Debug-Konfigurationen können einige Attribute Variablen verwenden (da sie im Debug-Adapter nach der Substitution verarbeitet werden) und einige Attribute Variablen nicht (da sie in der Erweiterung verarbeitet werden, wo die Substitution noch nicht stattgefunden hat). Issue #87450 ist ein gutes Beispiel für letzteres Problem.
In diesem Meilenstein haben wir dieses Problem behoben, indem wir einen zweiten Hook resolveDebugConfigurationWithSubstitutedVariables zum DebugConfigurationProvider hinzugefügt haben, der die Debug-Konfiguration mit allen substituierten Variablen empfängt.
Mit der Verfügbarkeit dieser neuen API bitten wir alle Debug-Erweiterungsautoren, ihre aktuellen Implementierungen von DebugConfigurationProvider.resolveDebugConfiguration sorgfältig zu überprüfen und allen Code, der keine neuen Variablen einführt, aber von der Ausführung mit substituierten Variablen profitieren würde, in die neue Methode resolveDebugConfigurationWithSubstitutedVariables zu verschieben.
Implementierung eines Debug-Adapters innerhalb einer Erweiterung
Die bestehende Debug-Erweiterungs-API unterstützt die Registrierung einer DebugAdapterDescriptorFactory für die Ausführung eines Debug-Adapters auf verschiedene Weise:
Als externer Prozess
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterExecutable('mockDebug.exe');
}
});
Als Netzwerksitzung
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterServer(12345, 'localhost');
}
});
In diesem Meilenstein haben wir eine dritte Variante hinzugefügt, bei der eine "Inline"-Implementierung eines Debug-Adapters bereitgestellt werden kann.
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterInlineImplementation(new InlineDebugAdapter());
}
});
Dies eliminiert die Notwendigkeit, über einen Stream-basierten Mechanismus mit dem Adapter zu kommunizieren und vereinfacht die Entwicklung, da der Adapter innerhalb der Erweiterung ausgeführt wird und leicht als Teil des VS Code-Erweiterungsdebuggings debuggt werden kann.
Die Inline-Implementierung (z. B. die InlineDebugAdapter von oben) muss das Debug Adapter Protocol implementieren. Da wir nicht das vollständige Debug Adapter Protocol in die Extension API von VS Code aufnehmen wollen, haben wir einen minimalistischen Teil dieses Protokolls eingeführt. Die Schnittstelle vscode.DebugAdapter hat nur zwei Methoden: eine zum Übergeben einer DAP-Nachricht an den Adapter (handleMessage) und eine zum Lauschen auf DAP-Nachrichten, die vom Adapter empfangen wurden (onDidSendMessage).
Basierend auf dieser Schnittstelle würde eine Implementierung eines Debug-Adapters mit dem folgenden Quellcode beginnen
class InlineDebugAdapter implements vscode.DebugAdapter {
private sendMessage = new vscode.EventEmitter<DebugProtocol.ProtocolMessage>();
private sequence: 1;
readonly onDidSendMessage: vscode.Event<DebugProtocol.ProtocolMessage> = this.sendMessage
.event;
handleMessage(message: DebugProtocol.ProtocolMessage): void {
switch (message.type) {
case 'request':
const request = <DebugProtocol.Request>message;
switch (request.command) {
case 'initialize':
const response: DebugProtocol.Response = {
type: 'response',
seq: this.sequence++,
success: true,
request_seq: request.seq,
command: request.command
};
this.sendMessage.fire(response);
break;
// many more requests needs to be handled here...
default:
break;
}
break;
case 'response':
break;
case 'event':
break;
}
}
dispose() {
// clean up resources
}
}
Da das Debug-Adapter-Protokoll (verfügbar als Node-Modul vscode-debugprotocol) eine kompatible Obermenge der Schnittstelle vscode.DebugAdapter ist, können Sie das Modul importieren, wenn Sie das vollständige Protokoll benötigen und einen Debug-Adapter komplett selbst implementieren möchten.
Eine viel einfachere Alternative ist die (fortgesetzte) Verwendung unserer Standardimplementierung eines Debug-Adapters, verfügbar als Node-Modul vscode-debugadapter. Ab Version 1.38.0-pre.4 ist die in diesem Modul eingeführte DebugSession (oder LoggingDebugSession) mit der in der Extension API definierten Schnittstelle vscode.DebugAdapter kompatibel.
Mit dieser API kann eine bestehende Debug-Adapter-Implementierung einfach so verwendet werden:
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterInlineImplementation(new MockDebugSession());
}
});
Weitere Details finden Sie im Mock debug-Beispiel.
Achtung: In dieser Version haben wir die Extension APIs zur Erstellung von Debug-Adaptern abgeschlossen. Daher kündigen wir an, dass wir die Unterstützung für zwei veraltete Attribute des debuggers-Beitragspunkts in der März-Version entfernen werden
adapterExecutableCommand- Verwenden Sie stattdessen die Extension APIsvscode.DebugAdapterDescriptorFactoryundvscode.DebugAdapterExecutable. Das Mock debug-Beispiel zeigt, wie die API verwendet wird.enableBreakpointsFor- Verwenden Sie stattdessen denbreakpoints-Beitragspunkt. Die Konvertierung muss inpackage.jsonerfolgen.
Wenn das aktuelle (veraltete) JSON so aussieht:
"contributes": {
"debuggers": [{
"type": "csharp",
// ...
"enableBreakpointsFor": [ "csharp", "razor" ]
// ...
}]
Die Konvertierung wäre:
"contributes": {
"breakpoints": [
{ "language": "csharp" },
{ "language": "razor" }
],
"debuggers": [{
"type": "csharp",
// ...
}]
Wir empfehlen betroffenen Erweiterungen, ihre Implementierung im Februar auf die neuen APIs umzustellen, damit wir genügend Zeit haben, Probleme bis März zu beheben.
Vorgeschlagene Erweiterungs-APIs
Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich, und Erweiterungsautoren können sie ausprobieren. Wie immer freuen wir uns über Ihr Feedback. So probieren Sie eine vorgeschlagene API aus:
- Sie müssen Insiders verwenden, da sich vorgeschlagene APIs häufig ändern.
- Sie müssen diese Zeile in der Datei
package.jsonIhrer Erweiterung haben:"enableProposedApi": true. - Kopieren Sie die neueste Version der Datei vscode.proposed.d.ts in den Quellcode-Speicherort Ihres Projekts.
Beachten Sie, dass Sie keine Erweiterung veröffentlichen können, die eine vorgeschlagene API verwendet. Möglicherweise gibt es in der nächsten Version Breaking Changes, und wir möchten niemals bestehende Erweiterungen brechen.
Metadaten für Workspace-Bearbeitungen hinzufügen
Die Refactoring-Vorschau-Unterstützung, die jetzt in VS Code enthalten ist, kommt mit einer neuen, optionalen API-Vorschlag. Sie ermöglicht es Ihnen, Änderungen einer Workspace-Bearbeitung zu klassifizieren. Sie können beispielsweise definieren, ob Änderungen eine Benutzerbestätigung erfordern oder eine Beschreibung wie "Umbenennungen in Zeichenfolgen und Kommentaren" hinzufügen. Der Vorschlag kann in Issue #77728 verfolgt werden und sein aktuelles Design dreht sich um die Schnittstelle WorkspaceEditMetadata.
Semantisches Hervorheben
Wenn Sie daran interessiert sind, semantisches Hervorheben zu Ihrer Sprache hinzuzufügen, bietet die Übersicht über semantisches Hervorheben eine Zusammenfassung der Konzepte und der neuen APIs.
Authentifizierungsanbieter
Einige Erweiterungen erfordern die Authentifizierung bei anderen Diensten. Der Vorschlag in Issue #88309 würde es Erweiterungen ermöglichen, Authentifizierungsanbieter zu registrieren, auf die von anderen Erweiterungen zugegriffen werden kann, was einen gemeinsamen Mechanismus zur Durchführung der Authentifizierung bietet.
Zeitachsenanbieter
Erweiterungen werden bald ihre eigenen Quellen zur neuen Zeitachsenansicht beitragen können. Sind Sie daran interessiert, Ihre eigene Zeitquellen hinzuzufügen? Schauen Sie sich diesen frühen Vorschlag in Issue #84297 an und geben Sie uns Ihr Feedback.
Dokumentation.Refactoring Beitragspunkt
Der vorgeschlagene Beitragspunkt documentation.refactoring ermöglicht es Erweiterungen, Dokumentation für ihre Refactorings bereitzustellen. Benutzer können diese Dokumentation anzeigen, wenn sie Refactorings anfordern.

Der vorgeschlagene Beitragspunkt gibt Erweiterungen die Kontrolle darüber, wie ihre Dokumentation angezeigt wird, indem Befehle verwendet werden.
"contributes": {
"documentation": {
"refactoring": [
{
"title": "Learn more about JS/TS refactorings",
"when": "typescript.isManagedFile",
"command": "_typescript.learnMoreAboutRefactorings"
}
]
}
}
title— Bezeichnung für die dem Benutzer angezeigte Dokumentationsaktion.when— When-Klausel, die bestimmt, wann die Dokumentation angezeigt werden soll.command— Befehl, der die Dokumentation anzeigt. Dieser Befehl könnte beispielsweise eine Webseite öffnen oder die Dokumentation direkt in VS Code anzeigen.
Issue #86788 verfolgt den Status des Vorschlags.
Backup- und Hot-Exit-Hooks für benutzerdefinierte Editoren
Wir haben in dieser Iteration weiter an der vorgeschlagenen Custom Editor API gearbeitet. Unsere Hauptuntersuchung in diesem Monat war, wie Hot Exit für benutzerdefinierte Editoren ermöglicht werden kann. Issue #88719 behandelt einige der Herausforderungen, auf die wir bei der Unterstützung von Hot Exit gestoßen sind, und einige der Ansätze, die wir in Betracht gezogen haben.
Das Ergebnis dieser Untersuchung ist eine neue optionale backup-Methode in der Schnittstelle WebviewCustomEditorEditingDelegate. Diese Methode wird von VS Code etwa eine Sekunde nach der Änderung der Ressource aufgerufen. Innerhalb der backup-Methode sollten Erweiterungen die Ressource in ihrem aktuellen Zustand speichern. Meistens bedeutet dies, die Ressource in den Workspace-Speicherordner zu schreiben. Wenn der Editor dann neu geladen wird, sollte er prüfen, ob gesicherte Backups vorhanden sind, bevor die Ressource selbst aus dem Workspace geladen wird.
Wir werden die benutzerdefinierte Editor-API in der nächsten Iteration weiterentwickeln.
Komplexes Abschlusslabel
Wir entwickeln die CompletionItem-API weiter, um komplexe Abschluss-Items zu unterstützen, die qualifizierte Namen, Importpfade, Rückgabetypen und andere Informationen bereitstellen müssen. Die Informationen müssen im Voraus bereitgestellt und nicht später aufgelöst werden. Die bereitgestellten Informationen werden inline im Suggest-Widget angezeigt. Wir werden den aktuellen Vorschlag in der nächsten Iteration weiterentwickeln. In der Zwischenzeit erwägen wir die Hinzufügung einer Statusleiste zum Suggest-Widget, um einige der Herausforderungen bei der Benutzeroberfläche und Entdeckbarkeit zu lösen. Wir freuen uns auf Ihr Feedback zur API.

Thema: Nord, Schriftart: Input Mono
Links zu Diagnosefehlern hinzufügen
Diagnosefehler können jetzt einen Link zu ihrem Fehlercode enthalten. Wenn ein Link angegeben ist, wird er im Problems-Panel, in der Inline-Fehleransicht und im Hover über dem Diagnosefehler angezeigt. Da wir in der nächsten Iteration an diesem Feature weiterarbeiten, können Sie Feedback in Issue #11847 geben.

Language Server Protocol
Die Version 3.15 des Language Server Protocol ist jetzt verfügbar. Wir haben auch die entsprechenden npm-Module für den VS Code LSP-Client und für LSP-Server, die in Node.js geschrieben sind, veröffentlicht. Die neueste Version der Bibliotheken enthält einen vorgeschlagenen Standard und eine Implementierung für semantische Token.
Die LSP-Website beherbergt jetzt eine vorläufige Version der Language Server Index Format-Spezifikation sowie eine entsprechende LSIF-Übersicht.
Browserunterstützung
Dateien per Drag & Drop in den Editor ziehen
Wenn Sie VS Code in einem Browser verwenden, können Sie jetzt lokale Dateien in den Editorbereich ziehen, um sie als nicht gespeicherte Dateien mit dem Inhalt der Dateien zu öffnen.

Neue Befehle
| Taste | Befehl | Befehls-ID |
|---|---|---|
| Panel nach links verschieben | workbench.action.positionPanelLeft |
|
| Panel nach rechts verschieben | workbench.action.positionPanelRight |
|
| Panel nach unten verschieben | workbench.action.positionPanelBottom |
|
| Nächsten kürzlich verwendeten Editor öffnen | workbench.action.openNextRecentlyUsedEditor |
|
| Zuvor verwendeten Editor öffnen | workbench.action.openPreviousRecentlyUsedEditor |
|
| Nächsten kürzlich verwendeten Editor in der Gruppe öffnen | workbench.action.openNextRecentlyUsedEditorInGroup |
|
| Zuvor verwendeten Editor in der Gruppe öffnen | workbench.action.openPreviousRecentlyUsedEditorInGroup |
|
| Picker der zuletzt verwendeten Editoren öffnen | workbench.action.showAllEditorsByMostRecentlyUsed |
|
| Zuvor verwendeten Editor über Picker öffnen | workbench.action.quickOpenPreviousRecentlyUsedEditor |
|
| ⌃Tab (Windows, Linux Ctrl+Tab) | Zuvor verwendeten Editor in der Gruppe über Picker öffnen | workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup |
| Am wenigsten verwendeten Editor über Picker öffnen | workbench.action.quickOpenLeastRecentlyUsedEditor |
|
| ⌃⇧Tab (Windows, Linux Ctrl+Shift+Tab) | Am wenigsten verwendeten Editor in der Gruppe über Picker öffnen | workbench.action.quickOpenLeastRecentlyUsedEditorInGroup |
| Entwickler: Extension Host neu starten | workbench.action.restartExtensionHost |
Technik
TSLint zu ESLint Migration
VS Code ist größtenteils in TypeScript geschrieben. Neben dem Compiler verwenden wir Linting, um bestimmte Stil- und Ingenieursregeln durchzusetzen. In der Vergangenheit haben wir TSLint für diese Aufgabe verwendet, aber vor etwa einem Jahr kündigten die Maintainer von TSLint seine Veralterung zugunsten von ESLint an.
In diesem Meilenstein haben wir auf ESLint migriert – das beinhaltet unsere Lint-Konfiguration und unsere benutzerdefinierten Regeln. Zu guter Letzt haben wir auch den yo code Extension Generator aktualisiert, sodass neue TypeScript-Erweiterungen auch von ESLint geprüft werden.
Wenn Sie TSLint in Ihren eigenen Projekten verwenden, haben wir eine Anleitung zur Migration von TSLint zu ESLint erstellt, die Ihnen beim Wechsel zu ESLint helfen soll.
VS Code mit TypeScript 3.8-beta erstellen
VS Code wird jetzt mit der TypeScript 3.8 Beta-Version erstellt.
Unterstützung für das Hosten des Monaco Editors im Shadow DOM
Wir haben verschiedene Probleme im Zusammenhang mit der Mausbehandlung und dynamischem CSS behoben, sodass der Monaco Editor jetzt innerhalb einer Shadow DOM API Shadow Root gehostet werden kann.
Neue Dokumentation
Container
Es gibt neue Artikel, die die Erstellung von Containern mit der Docker-Erweiterung von Microsoft behandeln. Sie finden Tutorials zum Containerisieren von Node.js und ASP.NET Core-Anwendungen, zum Pushen in ein Container-Registry und zum Deployen von Containern in die Cloud.

Bemerkenswerte Fehlerbehebungen
- 12058: UI-Status periodisch speichern, um Verluste beim Herunterfahren zu verhindern
- 79205: Explorer-Baum zeigt keine korrekten Inhalte an, wenn er mit einem fallbasierten Dateisystem auf einer nicht-fallbasierten Plattform verbunden ist
- 83543: Debug-Programmstandort wird nur für die aktive Sitzung angezeigt
- 85057: Dialogdetails in der Beschreibungszeile im benutzerdefinierten Dialog anzeigen
- 86445: Mehrere Watch-Debug-Variablen können nicht gleichzeitig über eine Tastenkombination gelöscht werden
- 88240: Langsam beim Erstellen vieler Watch-Dropdown-Ausdrücke
- 89057: Schreibgeschützte Editoren Probleme anzeigen lassen
- 89405: Textdateien: Keine Änderung melden für schreibgeschützte Modelle
Vielen Dank
Nicht zuletzt ein großes Dankeschön! an die folgenden Personen, die dazu beigetragen haben, VS Code noch besser zu machen
Beiträge zu unserer Fehlerverfolgung
Beiträge zu vscode
- Alexander Fell (@AlexFell-Velo): Panel links positionieren PR #84477
- AlexStrNik (@AlexStrNik): Fix #89493 PR #89653
- Brett Cannon (@brettcannon): Merge pull request #87946 from brettcannon/patch-2 PR #87946
- Bura Chuhadar (@BuraChuhadar)
- Siberian Cat (@cat-kitten): Roblox XML-Dateisyntax-Hervorhebungsunterstützung PR #87755
- Charles Gagnon (@Charles-Gagnon): Testcode nicht für Abdeckung instrumentieren PR #86608
- Chayim Refael Friedman (@ChayimFriedman2): Debug-Konsole nach Beendigung der Sitzung ausblenden PR #83249
- Daniel Beigi (@dbeigi): #83983 behoben, Hervorhebung von gefalteten Bereichen hinzugefügt PR #84955
- Dmitry Gozman (@dgozman): Debug-Adapter-Nachrichten in separaten Tasks verarbeiten; siehe #33822, #79196 PR #81403
- Dima Krasner (@dimkr): node-native-keymap auf 2.1.1 aktualisiert für einfachere ARM64-Kreuzkompilierung PR #86659
- David Lechner (@dlech): Behebt: Threads werden nach dem Neustart des Debug-Adapters nicht abgerufen PR #88790
- Daryl Chan (@dvrylc): Markdown-Vorschau-Editor-Symbol ausblenden, wenn kein aktives Symbolthema vorhanden ist PR #88692
- Fabien Launay (@FabienLaunay)
- Gabriel DeBacker (@GabeDeBacker): Ermöglicht es, dass bei der Ausführung von Erweiterungsinstallations- und Deinstallationsbefehlen Ausnahmen an den Aufrufer zurückgegeben werden PR #88714
- Jens Fischer (@Gama11): Dokumentation für QuickPickItem.description und detail verdeutlichen PR #88622
- John Murray (@gjsjohnmurray): #85645 Fehlermeldung beim Abrufen von Variablen anzeigen PR #85842
- @GustavoASC
- Rechtschreibfehler bei peekWidgetDefaultFocus-Konfiguration behoben PR #89672
- Befehle entwickelt, um den Fokus zwischen dem Vorschau-Editor und Referenzen innerhalb der Peek-Ansicht zu wechseln PR #85859
- [Faltung] Verhalten von 'Shift + Klick' geändert, um nur innere Bereiche zu falten, wenn der aktuelle Bereich entfaltet ist PR #86626
- Yunseok (@hannut91): Tippfehler behoben PR #88824
- Harald Rosberg (@hrosb): Electron auf 6.1.6 aktualisiert, behebt fehlende Fenstertitel in Barrierefreiheits-Apps PR #86837
- Andrew Liu (@hypercubestart): Korrigiert geparstes JSDoc-Autoren-Tag PR #80898
- Yuki Ueda (@Ikuyadeu): Ersetzt 'declare var' durch 'declare const' PR #87709
- Andrii Dieiev (@IllusionMH): Drosselt beim Tippen von Verlaufsereignissen für die Felder "einzuschließende/auszuschließende Dateien" PR #86785
- Jason (@JasonMFry): :speech_balloon: Grammatik auf der Willkommensseite korrigiert PR #88801
- Jean Pierre (@jeanp413)
- Merge pull request #87827 von jeanp413/fix-79857 PR #87827
- Behebt: Links in Aufzählungseinstellungen können nicht angeklickt werden PR #86463
- Behebt: Es können keine neuen Debug-Watch-Ausdrücke erstellt werden, während die Filterung aktiv ist PR #88502
- Behebt: Drag & Drop von Dateien öffnet das Explorer-Fenster nicht PR #88078
- Behebt: Falscher Fokus auf dem Element beim Erstellen einer neuen Datei/eines neuen Ordners und beim Umbenennen im Datei-Explorer PR #87052
- Behebt: Snippet-Ersetzung, wenn vor dem Präfix PR #86509
- Behebt: Terminal-Umgebungsvariablen werden in leeren Workspaces nicht aufgelöst PR #83369
- Behebt: Unterstützung für numerische Tastatur bei mightProducePrintableCharacter PR #77911
- Einstellung hinzugefügt, um zu steuern, ob der Inline-Editor im Peek-Widget standardmäßig fokussiert werden soll PR #88185
- Andy Edwards (@jedwards1211): fix(extHostProgress): drosseln statt verzögern PR #86161
- Jon Bockhorst (@jmbockhorst): Konsistente Verlinkung von Terminal-Links mit dem Editor PR #83620
- Robert Jin (@jzyrobert)
- Refaktorisiert SortOrder & SortOrderConfiguration in eine einzige Enum PR #87114
- Hinzufügt: CompletionItem-Konvertierung für zusätzliche Textbearbeitungen PR #87648
- #85858: Erlaubt breadcrumbs.symbolSortOrder pro Sprache PR #86430
- #88125: Umkehrt die Aktionsreihenfolge im goToErrorWidget PR #88167
- Korrigiert die Syntax von LocationLink-Links PR #87613
- #82352: Implementiert Sortierung für Suchergebnisse PR #86563
- Kristian Thy (@kthy): feat: Regionenfaltung für perl5 PR #85642
- kevinn (@latel): behoben: falsches Minimal-Wort in stateService PR #86744
- Jiaxun Wei (@LeuisKen): behoben: 'allow-forms' zum Sandbox-Attribut hinzufügen. PR #87334
- Luis Oliveira (@lmvco): Unterstützung für Shadow DOM PR #88536
- Jonathan Carter (@lostintangent): Schemarestriktion für Markdown/Emmet-Sprachfeatures entfernen PR #87541
- Maher Jendoubi (@MaherJendoubi): Beiträge: Tippfehler korrigiert PR #89256
- Maira Wenzel (@mairaw): Tippfehler korrigiert PR #88730
- Matias Godoy (@mattogodoy): Tippfehler behoben PR #86957
- Matt Crouch (@mjcrouch): Fehlende Formatierung an verschiedenen Icon-Container-Positionen behoben PR #88157
- Marko Novakovic (@mnovakovic): CallStackView versucht, den aktiven Frame an die Spitze zu verschieben PR #88074
- Mohammad Rahhal (@mrahhal): Spiegelnde Cursor-Auswahl korrigiert PR #86986
- Ilya Murav'jov (@muravjov): editor.insertSpaceAfterComment Einstellung PR #41747
- Micah Smith (@Olovan): Behebt #84145 beim Umschalten des Terminalfensters PR #88098
- pan93412 (@pan93412): fix(tokenClassificationExtensionPoint): einige Tippfehler PR #89704
- Przemek Dziewa (@pdziewa): Lange Statusleistenelemente korrigiert PR #87164
- Oliver Larsson (@Playturbo): Freundliche Pickstring-Optionen PR #89180
- Remy Suen (@rcjsuen): Fehlende Dokumentation zu CompletionItem's insertText hinzugefügt PR #87115
- @romainHainaut: Fix #83644 PR #86619
- Sameer Puri (@sameer): Ermöglicht Shift-Einfügen zum Einfügen der primären Zwischenablage unter Linux, behebt #36170. PR #63374
- @sharkykh: "Aktueller Git-Branch-Name beim Umbenennen" wiederhergestellt PR #86919
- Simon Siefke (@SimonSiefke): Korrigiert Tippfehler im TypeScript-CompletionItem-Kind für lokale Funktionen PR #87182
- @smilegodly: Doppelte "Clear Search" und "No Settings Found" entfernt PR #86494
- Konstantin Solomatov (@solomatov)
- @SPGoding: Korrigiert falschen Schlüssel im Schema der Erweiterungs-package.json PR #87042
- @sportshead: Entfernt search.location aus search.contribution.ts PR #89585
- @sverg1: customEditor umschalten und speichern/vorschau Tastenkombinationen PR #86505
- Ye Zhihao (@Vigilans): Behebt fehlerhafte Listenverwaltung des TreeView im Block für den Datei-Explorer PR #87805
- @xearonet: Korrigiert .bat-Variablenumrandung PR #88986
- Pen Tree (@zyctree): Korrigiert einen Tippfehler in vscode.d.ts PR #87704
Beiträge zu vscode-eslint
- Nikhil Verma (@NikhilVerma): Klarstellen, dass Modi Arrays und keine Objekte für die Konfiguration sind PR #853
- Tyler Waters (@tswaters): Behebt #805: ESLint in package.json unterstützen PR #877
Beiträge zu language-server-protocol
- Sebastian Zarnekow (@szarnekow): Kleinere Formatierungsfehler behoben PR #876
- @KamasamaK
Beiträge zu vscode-languageserver-node
- Simon Siefke (@SimonSiefke): Tippfehler behoben PR #547
- Remy Suen (@rcjsuen):
Beiträge zu debug-adapter-protocol
- Gerald Richter (@richterger): Aktualisierung von adapters.md PR #89
Beiträge zu vscode-vsce
- Felix Hao (@felixhao28): Unterstützung für verknüpfte npm-Module PR #411
- 道化師 (@wraith13): Anpassung von Meldungen an die aktuelle Situation PR #409
- Shaun Tabone (@xontab): Log-Level für den npm list-Befehl auf error geändert, um die Kompatibilität zu erhöhen PR #412
Beiträge zu vscode-js-debug
- Ben Creasy (@jcrben): fix: Zulassen des Weglassens von "program" aus launch.json PR #203
Beiträge zu vscode-generator-code
- Jake Witcher (@jakewitcher): Tippfehler in language-configuration.json der language extension template behoben PR #189
- Stavros Tsourlidakis (@stsourlidakis): Eslint-Probleme in ext-command-js/test behoben PR #190
Beiträge zu vscode-azurecli
- Matthew Burleigh (@mburleigh): Unterstützung für mehrzeilige Befehle PR #61
Beiträge zu vscode-emmet-helper
- Diogo Felix (@onlurking): feat: Emmet-Abkürzungen aktualisiert PR #34
Beiträge zu localization
Es gibt über 800 Cloud + AI-Lokalisierungs-Community-Mitglieder, die die Microsoft Localization Community Platform (MLCP) nutzen, mit über etwa 170 aktiven Mitwirkenden an Visual Studio Code. Wir schätzen Ihre Beiträge, sei es durch die Bereitstellung neuer Übersetzungen, die Abstimmung über Übersetzungen oder die Vorschläge zur Prozessverbesserung.
Hier ist eine Momentaufnahme der Mitwirkenden. Details zum Projekt, einschließlich der Liste der Mitwirkenden, finden Sie auf der Projektseite unter https://aka.ms/vscodeloc.
- Bosnisch (Lateinisch, Bosnien und Herzegowina): Sead Mulahasanović, Adnan Rizvan, Ismar Bašanović.
- Bulgarisch: Andreyka Lechev.
- Tschechisch: Michal Černík.
- Dänisch: Lasse Stilvang.
- Niederländisch: Philip Denys, Lemuel Gomez, Dennis Hummel, Gideon van de Laar.
- Englisch (Vereinigtes Königreich): Martin Littlecott, Alexander Ogilvie, Krishna Regar, Alonso Calderon, Daniel Imms, Kamalsinh Solanki.
- Finnisch: Tuula P.
- Französisch: Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Lucas A., Alain, BUFERNE, Xavier Laffargue, Mohamed Sahbi, DJ Dakta.
- Deutsch: Pascal Wiesendanger, Marvin Heilemann, jan-nitsche, Jakob von der Haar, Michael Richter.
- Griechisch: Valantis Kamayiannis, Θοδωρής Τσιρπάνης.
- Hebräisch: Ariel Bachar.
- Hindi: Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam.
- Ungarisch: József Cserkó, Kiss Attila Csaba, Krisztián Papp.
- Chinesisch vereinfacht: Yizhi Gu, Tingting Yi, Justin Liu, ick, Charles Dong, Peng Zeng, Tony Xia, 斌 项, 普鲁文, paul cheung, 张锐, Zhiqiang Li, Yixing Zheng, AlexiZz Nakido, 冉 耀隆, Chow David, Sheng Jiang, yungkei fan, Yao Rui, Joel Yang, 钟越, Chenglong Wei, 一斤瓜子, Yiting Zhu, Alexander ZHANG, YanJun Sun, Libing Yang, ZHENGCHENG CHEN, 张 任飞, 光宇 朴, 石岩 詹, 舜杰 杨, WJ Wang, Siam Chen.
- Chinesisch traditionell: Winnie Lin, 船長, Alan Tsai, TingWen Su.
- Indonesisch: Eriawan Kusumawardhono, Aldila, Arif Fahmi, Laurensius Dede Suhardiman, Mychael Go, Christian Elbrianno, Septian Adi.
- Italienisch: Alessandro Alpi, Luigi Bruno.
- Japanisch: Takayuki Fuwa, Seiichi Ariga, Koichi Makino, Yoshihisa Ozaki, 貴康 内田, Ishii Shun, Kyohei Uchida, TENMYO Masakazu, Aya Tokura.
- Koreanisch: Hongju.
- Lettisch: Andris Vilde.
- Norwegisch: Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen.
- Polnisch: Makabeus Orban, Mateusz Redynk, Kacper Łakomski, Piotr Rysak, Wojciech Maj, Oskar Janczak, Szymon Seliga, Franx Bar, Marcin Anonimus.
- Portugiesisch (Brasilien): Marcelo Fernandes, Arthur Lima, Albert Tanure, Loiane Groner, Nylsinho Santos, Alessandro Trovato, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Wellington OStemberg, Roberto Fonseca, Felipe Galante, Rodrigo Tavares, Alessandro Fragnani, Felipe Nascimento, Alexis Lopes.
- Portugiesisch (Portugal): Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes.
- Rumänisch: Tiberiu Frățilă, LaServici, Dan Ichim.
- Russisch: Vadim Svitkin, Николай Соколовский, Дмитрий Кирьянов, Baturin Valery.
- Serbisch Kyrillisch: Dusan Milojkovic.
- Spanisch: José María Aguilar, Ricardo Estrada Rdez, JOSE AHIAS LOPEZ PORTILLO, Gustavo Gabriel Gonzalez, Camilo Sasía.
- Schwedisch: Pelle Alstermo.
- Tamilisch: Rajesh Waran, MUTHU VIJAY, Sankar Raj, Kadhireshan S, saravanan ramesh, Aravindh JANAKIRAMAN, Pandidurai R, Madhu Chakravarthy, Madhu Maha.
- Türkisch: Mehmet Yönügül, Özgür ERSOY, mehmetcan Gün, Misir Jafarov, Isa Inalcik, Fırat Eşki, Gökberk Nur, Safa Selim.
- Ukrainisch: Serhii Shulhin, Arthur Murauskas, Oleksandr Krasnokutskyi, Фомін Тарас.
- Vietnamesisch: Dat Nguyen, Vương, Van-Tien Hoang, Dao Ngo, ng-hai.