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

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:

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.

Rename preview

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.

Open editor limit

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.

Untitled file title using first line of text

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.

Untitled file language mode dynamically set

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.

MRU editor list

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.

Save conflict dialog with overwrite

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.

Save Participant notification

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.

Two-step File Explorer collapse button

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.preferredLightColorTheme
  • workbench.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.

Fold highlight color

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.

Folding with Shift + Click

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.

Simplified initial Debug view

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.

Debug Console input with syntax coloring

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.

Debug Console input with arrow display

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 console history

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.

Debug Console table output

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.

Expand as you type in Loaded Scripts view

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 view context menu

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.

Debug Activity Bar icon showing two debug sessions

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:

Task pickString input with label

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.

Timeline view

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.

Search Editor UI

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.

TypeScript semantic highlighting

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.

JavaScript debug terminal

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.

JavaScript debug CodeLens

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.

Outline view moving to panel and back

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 Data Breakpoints

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.

Java Call Hierarchy view

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.ThemeIcon kann nun mit dem Namen eines Codicons instanziiert werden. Zum Beispiel new vscode.ThemeIcon("zap").
  • Der Typ vscode.MarkdownString unterstützt nun die Inline-Syntax $(<name>). Zum Beispiel myMdString.appendMarkdown('Hello $(globe)');. Beachten Sie, dass Sie, um Codicons innerhalb von MarkdownString zu verwenden, das Konstruktorargument supportThemeIcons aktivieren müssen.
  • commands, die in der package.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)".

All available codicons displayed in a hover

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 };

  //...
}
  1. Wenn der Bereich undefined ist, verwendet VS Code den aktuellen Wortbereich zum Ersetzen und denselben Bereich, der auf die Cursorposition zugeschnitten ist, zum Einfügen.
  2. Wenn der Bereich ein einfaches vscode.Range ist, dann weiß VS Code, dass es nur einen Ort zum Einfügen oder Ersetzen gibt.
  3. 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",
            }
        ]
    }
}

Extensions view context menu

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==installed
  • isBuiltinExtension

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 APIs vscode.DebugAdapterDescriptorFactory und vscode.DebugAdapterExecutable. Das Mock debug-Beispiel zeigt, wie die API verwendet wird.
  • enableBreakpointsFor - Verwenden Sie stattdessen den breakpoints-Beitragspunkt. Die Konvertierung muss in package.json erfolgen.

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.json Ihrer 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.

Refactoring documentation

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.
  • whenWhen-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.

Complex completion label

Thema: Nord, Schriftart: Input Mono

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.

Diagnostic with link

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.

In-browser support for drag and drop

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.

Docker extension

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

Beiträge zu vscode-eslint

Beiträge zu language-server-protocol

Beiträge zu vscode-languageserver-node

Beiträge zu debug-adapter-protocol

Beiträge zu vscode-vsce

Beiträge zu vscode-js-debug

Beiträge zu vscode-generator-code

Beiträge zu vscode-azurecli

Beiträge zu vscode-emmet-helper

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.
© . This site is unofficial and not affiliated with Microsoft.