November 2018 (Version 1.30)
Update 1.30.2: Das Update behebt diese Probleme.
Update 1.30.1: Das Update behebt diese Probleme.
Downloads: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball
Willkommen zur November 2018-Version von Visual Studio Code. Es gibt eine Reihe wichtiger Updates in dieser Version, die Ihnen hoffentlich gefallen werden. Einige der wichtigsten Highlights sind:
- Verbesserungen bei der mehrzeiligen Suche - Erstellen Sie einfach mehrzeilige Suchmuster, ohne Regex verwenden zu müssen.
- Benutzerdefinierte Titelleiste unter Linux - Die benutzerdefinierte Titelleiste und Menüleiste ist jetzt unter Linux standardmäßig aktiviert.
- Referenzansicht - Die Ansicht "Alle Referenzen finden" enthält den Verlauf kürzlicher Suchen.
- Snippet-Kommentarvariablen - Snippet-Variablen fügen den richtigen Kommentar pro Sprache ein.
- JS/TS Callback-Anzeige - Jetzt können Sie den Kontext von anonymen Callbacks sehen.
- JSDoc Markdown-Hervorhebung - Einschließlich Syntaxhervorhebung für Markdown-Codeblöcke in JSDoc.
- Vereinfachte Debug-Konfiguration - Bessere Standardwerte und Quick Pick UI für die anfängliche Startkonfiguration.
- Aufgaben bei Ordneröffnung ausführen - Konfigurieren Sie Aufgaben, die ausgeführt werden sollen, wenn Sie einen Projektordner zum ersten Mal öffnen.
- Erweiterungsversion auswählen - Installieren Sie frühere Versionen von Marketplace-Erweiterungen.
Wenn Sie diese Release Notes online lesen möchten, gehen Sie zu Updates auf code.visualstudio.com.
Die Release Notes sind in die folgenden Abschnitte unterteilt, die sich auf die Fokusbereiche von VS Code beziehen. Hier sind einige weitere Updates:
- Workbench - Menü-Scrolling und verbesserte Überlaufbehandlung, ein Klick zum Öffnen von settings.json.
- Sprachen - JS/TS-Umbenennungen verarbeiten jetzt Destrukturierung, fügen fehlende "new"-Quick-Fix-Option hinzu.
- Debugging - Debugging-Konsolen löschen, direkt aus dem VS Code Process Explorer debuggen.
- Aufgaben - Task-Terminal löschen, Benutzereingabe für Task-Variablen, letzte Task-Befehl erneut ausführen.
- Erweiterungsentwicklung - Unterstützung für "Go to Declaration", neuer Kontext für Signature Help.
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
Mehrzeilige Sucheingabe
Letzten Monat haben wir Unterstützung für mehrzeilige Suche hinzugefügt. Diesen Monat haben wir die Such-UX verbessert, um sie einfacher nutzbar zu machen. Jetzt können Sie mit mehrzeiligem Text suchen, ohne einen regulären Ausdruck schreiben zu müssen. Geben Sie Shift+Enter in das Suchfeld ein, um einen Zeilenumbruch einzufügen, und das Suchfeld wird erweitert, um Ihre vollständige mehrzeilige Abfrage anzuzeigen. Sie können auch eine mehrzeilige Auswahl aus dem Editor kopieren und in das Suchfeld einfügen.

Benutzerdefinierte Titelleiste und Menüleiste unter Linux standardmäßig
Über mehrere Versionen hinweg haben wir die Barrierefreiheit und Thematisierung von Menüs unter Windows über die benutzerdefinierte Titelleiste und Menüleiste verbessert. Obwohl sie unter Linux optional verfügbar war, wird sie in dieser Version nun standardmäßig aktiviert.

Um die native Titelleiste zu verwenden, können Sie window.titleBarStyle auf native setzen.
Scrollbare Menüs
Mit der aktivierten benutzerdefinierten Menüleiste sind Menüs auf die Darstellung innerhalb des VS Code-Fensters beschränkt. Zuvor konnten Menüs durch die Fenstergrenzen abgeschnitten werden. Dies wurde nun behoben, indem Kontextmenüs bei Bedarf scrollbar gemacht wurden.

Überlaufmenü der Menüleiste
Die Menüleiste hat auch ein neues Überlaufmenü (...), wenn Ihre Fensterbreite nicht ausreicht, um sowohl die Menüleiste als auch den Fenstertitel aufzunehmen.

Aktionen des Einstellungen-Editors verschoben
Die Aktionen des Einstellungen-Editors (Einstellungen.json öffnen, Geänderte Einstellungen anzeigen usw.) wurden aus dem Menü ... innerhalb des Einstellungen-Editors in die Titelleiste des Editors verschoben. Dies macht sie konsistent mit anderen Editortypen, und Einstellungen.json öffnen ist nun nur noch einen Klick entfernt mit der Schaltfläche mit den geschweiften Klammern {}. Der Editor für Tastenkombinationen hat die gleiche Änderung vorgenommen.

Referenzansicht
Die Referenzansicht wurde überarbeitet und ist keine Vorschau-Funktion mehr. Es gibt nun zwei Befehle:
- Alle Referenzen finden, der die Referenzansicht öffnet.
- Referenzen anzeigen, der Referenzen in einer Vorschauansicht öffnet.
Die Referenzansicht ist beim Start ausgeblendet, bleibt aber sichtbar, sobald sie verwendet wurde. Wenn alle Suchergebnisse gelöscht sind, zeigt sie einen Verlauf früherer Suchen an.

Es gibt jetzt eine Zusammenfassung der Ergebnisse am oberen Rand der Ansicht und ein Kontextmenü zum Löschen und Kopieren von Ergebnissen. Viele Fehler wurden behoben und die Gesamtstabilität wurde verbessert.
Editor
Snippet-Kommentarvariablen
Es gibt neue Snippet-Variablen, die Zeilen- oder Blockkommentare einfügen und die aktuelle Sprache berücksichtigen. Verwenden Sie BLOCK_COMMENT_START und BLOCK_COMMENT_END für Blockkommentare und LINE_COMMENT ansonsten.
Das folgende Snippet fügt /* Hello World */ in JavaScript-Dateien und <!-- Hello World --> in HTML-Dateien ein.
{
"hello": {
"scope": "javascript,html",
"prefix": "hello",
"body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
}
}
Deklaration versus Definition
Bisher bot VS Code Befehle zum Anzeigen der Definition eines Symbols, z. B. Gehe zur Definition und Definition anzeigen. Dies berücksichtigte nicht die Tatsache, dass einige Sprachen strikter als andere zwischen der Deklaration und der Definition eines Symbols unterscheiden. Wir haben dies behoben, und es gibt nun die Befehle Gehe zur Deklaration und Deklaration anzeigen für die Deklaration eines Symbols.

Die für Sprachfunktionen wie Gehe zur Deklaration benötigten Daten werden von Erweiterungen berechnet, und es gibt eine neue API, über die Sie im Abschnitt Erweiterungsentwicklung lesen können.
Sanfte Cursor-Animation
Es gibt eine neue Einstellung, editor.cursorSmoothCaretAnimation, die eine Übergangsanimation aktiviert, wenn der Cursor bewegt wird.
Git-Integration
Standard-Klickaktion ändern
Sie können jetzt die Standardaktion ändern, wenn Sie in der Quellcodeverwaltungsansicht auf eine Datei klicken. Standardmäßig öffnet VS Code die Diff-Ansicht, aber durch Setzen von git.openDiffOnClick auf false wird die Datei in einem normalen Editor geöffnet.
Push oder Sync nach Commit
Eine neue Einstellung git.postCommitCommand ermöglicht es Ihnen, Ihr Repository nach einem Commit zu pushen oder zu synchronisieren. Die verfügbaren Werte sind none (Standard), push und sync.
Sprachen
TypeScript 3.2
VS Code enthält jetzt TypeScript 3.2.2. Diese Version bringt einige aufregende neue Sprachfunktionen, darunter strikte Typisierung für bind, call und apply und BigInt-Unterstützung. Das TypeScript-Update behebt auch einige wichtige Fehler und enthält neue Tooling-Funktionen und Verbesserungen.
Verbesserte Anzeige von JavaScript- und TypeScript-Callbacks
JavaScript- und TypeScript-anonyme Callbacks wurden im Outline-View, Breadcrumbs-View und der Dokumentensymbolliste alle als <function> bezeichnet. Dies machte es unmöglich zu erkennen, nach welcher Funktion Sie wirklich gesucht haben.

Mit TypeScript 3.2+ zeigt VS Code mehr Kontext für Callback-Funktionen an, sodass Sie sie unterscheiden können.

Umbenennungen verarbeiten JS/TS-Destrukturierung korrekt
Umbenennungen verarbeiten jetzt JavaScript- und TypeScript-Destrukturierung und führen bei Bedarf einen Alias ein.

Hinzufügen einer fehlenden new JS/TS Quick Fix
Vergessen Sie new beim Instanziieren einer Klasse? TypeScript 3.2 bietet eine neue Quick Fix-Option, die Ihnen hilft.

Diese Quick Fix funktioniert in TypeScript und in typgeprüftem JavaScript.
Dateisymbole für JS/TS-Pfadvorschläge
Aufbauend auf der Arbeit in VS Code 1.29 zeigt das IntelliSense-Widget jetzt Dateisymbole für JavaScript- und TypeScript-Pfadvorschläge an.
![]()
Hervorhebung von Markdown-Elementen in JSDoc-Kommentaren
Eingefasste Codeblöcke und andere Markdown-Elemente in JSDoc-Blöcken werden jetzt syntaktisch hervorgehoben.

Diese Inline-Hervorhebung entspricht besser der Markdown-Darstellung von JSDoc in VS Code für Hovers und IntelliSense-Dokumentation.
Debugging
Vereinfachte anfängliche Debug-Konfiguration
In diesem Meilenstein haben wir uns mit der Vereinfachung der generierten launch.json-Datei für unsere beliebtesten Debug-Erweiterungen beschäftigt. Unser Ziel war es, es den Benutzern zu erleichtern, mit dem Debugging zu beginnen und es zu konfigurieren. Dies bedeutete, unnötige Startkonfigurationsattribute auszublenden und die Quick Pick UI für eine bessere Benutzerinteraktion bei der Generierung der anfänglichen launch.json zu verwenden. Weitere Details zu dieser Anstrengung finden Sie in Issue #62851.
Debug-Konsolen können gelöscht werden
Seit dem letzten Meilenstein zeigen wir beim Debuggen mehrerer Debug-Sitzungen mehrere Debug-Konsolen an, eine für jede Sitzung. Jetzt ist es möglich, diese Konsolen zu löschen, wenn die entsprechende Sitzung nicht mehr aktiv ist, indem der Inhalt dieser Debug-Konsole gelöscht wird. Wir haben keine expliziten Befehle zur Verwaltung des Lebenszyklus einer Debug-Konsole hinzugefügt, da wir glauben, dass der aktuelle Ansatz intuitiver und einfacher zu bedienen ist.
Verbesserte Benutzereingabevariablen für Debug-Konfigurationen
Wir haben das Konzept von launch.json-Variablen, die zur Benutzereingabe auffordern, verbessert und verallgemeinert. Die Details finden Sie im Abschnitt Aufgaben.
Debugging aus dem Process Explorer
Es ist jetzt möglich, Node.js-Prozesse aus dem VS Code Process Explorer (Entwickler: Process Explorer öffnen) über die Kontextmenüaktion Debuggen zu starten.
Unten sehen Sie das Anhängen an einen Node.js-Prozess, der aus dem integrierten Terminal gestartet wurde.

Node/Chrome-Debugging
smartStep jetzt standardmäßig aktiviert
Vor einigen Versionen haben wir das Verhalten von smartStep geändert, um es nützlicher zu machen. Die Verwendung von smartStep führt zu einer viel besseren Debugging-Erfahrung, insbesondere für TypeScript, daher haben wir das Verhalten so geändert, dass es immer eingeschaltet ist.
Automatischer Standardwert für localRoot
In Node.js-Fern-Debugging-Szenarien ist das Attribut der Debug-Konfiguration localRoot jetzt standardmäßig auf ${workspaceFolder} gesetzt, und nur remoteRoot muss angegeben werden.
Aufgaben
Ausführen bei Ordneröffnung
Wenn Sie eine Aufgabe haben, die Sie immer beim Öffnen eines Ordners ausführen, können Sie sie so konfigurieren, dass sie automatisch ausgeführt wird, wenn dieser Ordner geöffnet wird, indem Sie ihre "runOn"-Eigenschaft konfigurieren. Wir fanden dies nützlich, um sicherzustellen, dass niemand unsere neuen strikten Nullprüfungen im VS Code-Repository bricht. Durch Hinzufügen von "runOn": "folderOpen" erhalten alle, die das automatische Ausführen von Aufgaben zulassen, Markierungen, wenn sie gegen die strikte Nullprüfung verstoßen.
{
"type": "npm",
"script": "strict-null-check-watch",
"label": "TS - Strict Null Checks",
"isBackground": true,
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-null",
"applyTo": "allDocuments"
},
"runOptions": {
"runOn": "folderOpen"
}
}
Task-Terminal löschen
Um das Terminal vor der Ausführung einer Aufgabe zu löschen, können Sie die presentation-Optionen der Aufgabe mit "clear": true konfigurieren.
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"presentation": {
"clear": true
}
}
Aufgaben erneut ausführen
Aufgaben können jetzt mit dem Befehl Aufgaben: Letzte Aufgabe erneut ausführen (workbench.action.tasks.reRunTask) erneut ausgeführt werden. Standardmäßig wird eine neu ausgeführte Aufgabe ihre Ausführungsvariablen neu bewerten, einschließlich ihrer Eingaben. Um die bereits in der vorherigen Ausführung ausgewerteten Variablen zu verwenden, konfigurieren Sie die Option "reevaluateOnRerun".
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"runOptions": {
"reevaluateOnRerun": false
}
}
Verbesserte Benutzereingabevariablen für Aufgaben- und Debug-Konfigurationen
Schon lange unterstützt VS Code Variablenersetzung in tasks.json und launch.json über die ${variableName}-Syntax.
Für launch.json war es sogar möglich, Variablen zu verwenden, die zur Benutzereingabe auffordern (z. B. ${command:pickNodeProcess}, das einen Prozessauswähler basierend auf Quick Pick öffnet). Diese Funktion war für tasks.json nicht verfügbar und die Befehls-basierten Variablen hatten auch andere Einschränkungen (siehe Issues #9297, #9544 und #30588).
In diesem Meilenstein wurden Benutzereingabevariablen verallgemeinert und verbessert und sind jetzt für launch.json und tasks.json verfügbar. Diese Arbeit hat auch die Befehlssyntax nach tasks.json gebracht.
Für Benutzereingabevariablen haben wir eine neue Variablengruppe input eingeführt, die zu dieser Syntax führt: ${input:variableName}. Diese einfache Syntax reicht nicht aus, um dem Benutzer eine aussagekräftige Benutzeroberfläche zu präsentieren. Daher haben wir einen neuen Abschnitt inputs in launch.json und tasks.json eingeführt, in dem zusätzliche Konfigurationsattribute angegeben werden.
Beispiel mit Angular CLI

Hier ist die Liste der unterstützten Attribute:
id- Der entsprechende Variablenname, für den diese Attribute verwendet werden.type- Der Typ des Benutzereingabe-Widgets. In dieser Version werdenpromptString(für ein String-InputBox) undpickString(für einen String Quick Pick) unterstützt.description- Beschreibender Text, der dem Benutzer angezeigt wird.default- Der Standardwert, der verwendet wird, wenn der Benutzer nur Enter drückt.
Ein erstes Beispiel zeigt, wie eine Benutzereingabevariable in einer Aufgabenkonfiguration (tasks.json) verwendet wird.
{
"tasks": [
{
"label": "Echo input",
"type": "shell",
"command": "echo ${input:echoPrompt}"
}
],
"inputs": [
{
"id": "echoPrompt",
"description": "Please enter a value",
"default": "default echo text",
"type": "promptString"
}
]
}
Ein weiteres Beispiel zeigt eine Benutzereingabevariable zur Auswahl zwischen zwei Optionen in einer Debug-Konfiguration (launch.json).
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/${input:pickProgram}"
}
],
"inputs": [
{
"id": "pickProgram",
"description": "Select client or server",
"type": "pickString",
"options": ["client.js", "server.js"],
"default": "client.js"
}
]
}
Wir planen, Benutzereingabevariablen mit den vorhandenen Befehls-basierten Variablen zu kombinieren, damit Benutzereingabevariablen von Erweiterungen bereitgestellt werden können.
Erweiterungen
Frühere Versionen installieren
Sie können jetzt zu einer früheren Version einer Erweiterung zurückkehren, wenn es Probleme mit der aktuellen Version gibt. VS Code bietet eine Aktion Weitere Version installieren für eine installierte Erweiterung, die eine Dropdown-Liste mit verfügbaren Versionen anzeigt.

Nicht reagierender Erweiterungs-Host
VS Code führt Erweiterungen in einem separaten Node.js-Prozess aus – dem Erweiterungs-Host. Dies isoliert den Erweiterungscode von VS Code selbst, isoliert aber nicht verschiedene Erweiterungen voneinander. Aufgrund der Single-Threaded-Natur von JavaScript kann eine Erweiterung, ob absichtlich oder nicht, den Erweiterungs-Host-Thread monopolisieren, alle anderen Erweiterungen blockieren und Vorgänge als nicht reagierend erscheinen lassen.
VS Code überwacht jetzt den Erweiterungs-Host, und wenn er nicht reagiert, beginnt VS Code mit der Profilerstellung des Erweiterungs-Hosts. Wenn eine Erweiterung als Ursache für die Nichtreaktion identifiziert wird, wird eine minimierte Benachrichtigung angezeigt, die den Benutzer auffordert, ein Problem zu melden.

Als Benutzer halten Sie die Glocke in der Statusleiste im Auge, da die Benachrichtigung klein ist. Als Erweiterungsautor, wenn Sie eine Benachrichtigung über Nichtreaktion erhalten, überprüfen Sie bitte diese Anleitung, die erklärt, was passiert ist und wie man das CPU-Profil öffnet, das dem Problem beigefügt ist.
Vorschau-Features
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.
HTML-Benutzerdefinierte Tags / Attribute Unterstützung
Die neuen Einstellungen html.experimental.custom.tags und html.experimental.custom.attributes ermöglichen es Ihnen, eine Liste von Tags und Attributen anzugeben, die VS Code beim Start lädt. Wenn Sie HTML-Dateien bearbeiten, bietet VS Code Auto-Vervollständigung und Hover für diese Tags und Attribute. Dies funktioniert hervorragend mit Web Components, zum Beispiel.

Sie können das Repository octref/web-components-examples öffnen, um diese Funktion zu testen. Diese Funktion ist in der Vorschau und sowohl die Einstellungsnamen als auch das JSON-Format können sich ändern.
Wenn Sie Feedback oder Funktionswünsche haben, melden Sie sich bitte in Issue #62976.
Netzwerk-Proxy-Unterstützung für Erweiterungen
Es gibt eine experimentelle Einstellung Http: Proxy Support zur Aktivierung der Netzwerkkproxysupports für alle Erweiterungen. Obwohl wir noch an einigen Details arbeiten, laden wir Sie ein, es auszuprobieren und uns mitzuteilen, ob es für Sie funktioniert. (Beachten Sie, dass die Aktivierung der Netzwerkkproxysupports derzeit die Anmeldung der GitHub Pull-Request-Erweiterung unterbricht.)

Das Setzen auf override sollte für die meisten Setups am besten funktionieren, versuchen Sie on zum Vergleich, wenn das nicht gut funktioniert.
Erweiterungsentwicklung
Deklaration anzeigen
Wir haben eine DeclarationProvider-Schnittstelle hinzugefügt, die Erweiterungen implementieren können, um die Funktion Gehe zur Deklaration zu unterstützen. Deklarationsanbieter sollten Speicherorte zurückgeben, die die Deklaration eines Symbols sind. Wenn mehrere Anbieter für dieselbe Datei registriert sind, werden ihre Ergebnisse zusammengeführt.
Signaturhilfe-Kontext
SignatureHelpProviders erhalten jetzt einen context-Parameter, der Informationen darüber liefert, wie die Signaturhilfe ausgelöst wurde. Der Kontext umfasst:
- Wie die Signaturhilfe ausgelöst wurde (Triggerzeichen, ein Befehl oder eine Dokumentenkontextänderung).
- Das Zeichen, das die Signaturhilfe ausgelöst hat.
- Wurde die Signaturhilfe zuvor angezeigt, als sie ausgelöst wurde?
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
vscode.languages.registerSignatureHelpProvider(
'markdown',
new (class implements vscode.SignatureHelpProvider {
provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.SignatureHelpContext
): vscode.ProviderResult<vscode.SignatureHelp> {
// Return fake signature help result
const sigHelp = new vscode.SignatureHelp();
sigHelp.activeParameter = 0;
sigHelp.activeSignature = 0;
sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
return sigHelp;
}
})(),
{
triggerCharacters: ['('],
retriggerCharacters: [',']
}
);
}
function getLabel(context: vscode.SignatureHelpContext): string {
const parts = [];
// How was signature help triggered
switch (context.triggerKind) {
case vscode.SignatureHelpTriggerKind.Invoke:
parts.push('invoke');
break;
case vscode.SignatureHelpTriggerKind.ContentChange:
parts.push('change');
break;
case vscode.SignatureHelpTriggerKind.TriggerCharacter:
parts.push('character');
break;
}
// The character (if any) that caused signature help to be triggered
if (context.triggerCharacter) {
parts.push(context.triggerCharacter);
}
// Was signature help already showing when it was triggered again?
if (context.isRetrigger) {
parts.push('retrigger');
}
return parts.join(' ');
}
Darüber hinaus können SignatureHelpProviders jetzt mit einer unterschiedlichen Menge von Trigger- und Re-Trigger-Zeichen registriert werden. Re-Trigger-Zeichen lösen die Signaturhilfe nur aus, wenn sie bereits angezeigt wird.
Hier sehen Sie den obigen SignatureHelpProvider in Aktion.

Konfigurieren von beigesteuerten TypeScript-Server-Plugins
Erweiterungen können jetzt Konfigurationsdaten an beitragende TypeScript-Server-Plugins über eine von VS Codes integrierter TypeScript-Erweiterung bereitgestellte API senden.
// In your VS Code extension
export async function activate(context: vscode.ExtensionContext) {
// Get the TS extension
const tsExtension = vscode.extensions.gettsExtension(
'vscode.typescript-language-features'
);
if (!tsExtension) {
return;
}
await tsExtension.activate();
// Get the API from the TS extension
if (!tsExtension.exports || !tsExtension.exports.getAPI) {
return;
}
const api = tsExtension.exports.getAPI(0);
if (!api) {
return;
}
// Configure the 'my-typescript-plugin-id' plugin
api.configurePlugin('my-typescript-plugin-id', {
someValue: process.env['SOME_VALUE']
});
}
Das TypeScript-Server-Plugin empfängt die Konfigurationsdaten über eine Methode onConfigurationChanged.
// In your TypeScript plugin
import * as ts_module from 'typescript/lib/tsserverlibrary';
export = function init({ typescript }: { typescript: typeof ts_module }) {
return {
create(info: ts.server.PluginCreateInfo) {
// Create new language service
},
onConfigurationChanged(config: any) {
// Receive configuration changes sent from VS Code
}
};
};
Diese API ermöglicht es VS Code-Erweiterungen, VS Code-Einstellungen mit einem TypeScript-Server-Plugin zu synchronisieren oder das Verhalten eines Plugins dynamisch zu ändern. Schauen Sie sich das TypeScript TSLint Plugin und lit-html-Erweiterungen an, um zu sehen, wie diese API in der Praxis verwendet wird.
Benutzerdefinierte Ansichten
Die vorgeschlagene API zum Hinzufügen einer Alle reduzieren-Aktion zu Ihrer Ansicht ist jetzt stabil.
Beschreibung des Tree-Elements
Sie können Ihrem Tree-Element jetzt eine Beschreibung hinzufügen, indem Sie die Eigenschaft description in TreeItem verwenden. Wenn das Tree-Element von einer Ressource unterstützt wird, können Sie VS Code auch die Beschreibung aus der Ressource ableiten lassen, indem Sie description auf true setzen.
/**
* A human readable string which is rendered less prominently.
* When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
*/
description?: string | boolean;

Debugging-API
Erweiterte DebugSession
Die API DebugSession stellt nun den Arbeitsbereichsordner und die aufgelöste Debug-Konfiguration bereit. Aufgelöst bedeutet, dass alle Variablen ersetzt wurden und plattformspezifische Attributabschnitte für die passende Plattform "geglättet" und für nicht passende Plattformen entfernt wurden.
Eindeutige ID für Breakpoints
Die Klasse Breakpoint stellt nun eine eindeutige ID (id) bereit, die sich über ihre gesamte Lebensdauer nicht ändert.
Fertige API zur Steuerung der Erstellung von Debug-Adaptern
In diesem Meilenstein haben wir die Erweiterungs-API zur Steuerung der Erstellung von Debug-Adaptern fertiggestellt. Die API verwendet eine neue DebugAdapterDescriptorFactory, die für einen bestimmten Debug-Typ bei vscode.debug.registerDebugAdapterDescriptorFactory registriert werden muss. Die Factory hat eine einzige Methode createDebugAdapterDescriptor, die von VS Code aufgerufen wird, wann immer ein Debug-Adapter benötigt wird. Da die Debug-Sitzung als Argument übergeben wird (und die Sitzung nun sowohl den Arbeitsbereichsordner als auch die aufgelöste Konfiguration bereitstellt), hat die Implementierung Zugriff auf den vollständigen Kontext, wenn sie aufgefordert wird, den Debug-Adapter zu erstellen. createDebugAdapterDescriptor muss ein Objekt zurückgeben, das VS Code beschreibt, wie der Debug-Adapter erstellt und/oder verbunden wird.
- Ein
DebugAdapterExecutable-Deskriptor veranlasst VS Code, den Debug-Adapter pro Sitzung als externen Prozess zu starten und über stdin/stdout damit zu kommunizieren. Ein Options-Eigenschaftspaket kann das Arbeitsverzeichnis und Umgebungsvariablen angeben. - Ein
DebugAdapterSerververanlasst VS Code, sich mit einem Serverprozess zu verbinden, der mehrere Sitzungen verwaltet und über einen Socket kommuniziert.
Bitte beachten Sie: Mit der Fertigstellung dieser API deprecieren wir die alte (vorgeschlagene) API DebugConfigurationProvider.debugAdapterExecutable und den sehr alten Befehls-basierten Ansatz (Beitragspunkt Debuggers, Attribut: adapterExecutableCommand). Bitte wechseln Sie von diesen APIs weg, da wir planen, die Unterstützung dafür in der nächsten Version zu entfernen.
Dieses Snippet zeigt, wie diese API verwendet werden kann, um einen in seine enthaltende Erweiterung eingebetteten Debug-Adapter auszuführen.
let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
// start server on launch of first debug session
if (!server) {
// start listening on a random port
server = Net.createServer(socket => {
const s = new MockDebugSession();
s.setRunAsServer(true);
s.start(<NodeJS.ReadableStream>socket, socket);
}).listen(0);
}
// make VS Code connect to debug server instead of launching debug adapter
return new DebugAdapterServer(server.address().port);
}
});
Fertige Debug Adapter Tracker API
In diesem Meilenstein haben wir die Erweiterungs-API zur Verfolgung des Debug Adapter Protocol, das zwischen VS Code und Debugger-Erweiterungen verwendet wird, fertiggestellt. Die API verwendet eine neue DebugAdapterTrackerFactory, die für einen Debug-Typ bei vscode.debug.registerDebugAdapterTrackerFactory registriert werden muss. Die Factory hat eine einzige Methode createDebugAdapterTracker, die von VS Code aufgerufen wird, bevor es mit der Kommunikation mit dem Debug-Adapter beginnt. createDebugAdapterDescriptor muss eine Implementierung eines DebugAdapterTracker (oder undefined, um das Tracking zu verhindern) zurückgeben.
Dieses Snippet zeigt, wie diese API verwendet werden kann, um das Debug Adapter Protocol für den Node.js-Debugger zu protokollieren.
vscode.debug.registerDebugAdapterTrackerFactory('node', {
createDebugAdapterTracker(session: DebugSession) {
return {
onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
};
}
});
Um sicherzustellen, dass die Erweiterung bei Bedarf aktiviert wird, kann ein Aktivierungsereignis onDebugAdapterProtocolTracker:<debug type> in der package.json verwendet werden. Wenn der Debug-Typ weggelassen wird, wird die Erweiterung für alle Debug-Typen aktiviert.
{
"activationEvents": ["onDebugAdapterProtocolTracker:node"]
}
Debug Adapter Protocol
Neues Attribut shellProcessId für die Antwort runInTerminal
Wenn ein Debug-Adapter ein Ziel in einem Terminal ausführen muss, kann er die DAP-Anfrage runInTerminal verwenden. Diese Anfrage kann optional die processId des Zielprozesses zurückgeben, aber in der Praxis konnte keine Frontend-Implementierung diese Informationen liefern. Aus diesem Grund haben wir ein neues Attribut shellProcessId zur Rückgabe der Prozess-ID der Terminal-Shell (die viel einfacher zu ermitteln ist) eingeführt.
Zwischenablage
Die Zwischenablage-API ist fertiggestellt und kann jetzt von allen Erweiterungen verwendet werden. Sie ermöglicht Erweiterungen, Zeichenfolgen in die Betriebssystem-Zwischenablage zu kopieren und daraus einzufügen.
Abschluss-Elemente
Beim Einfügen eines Abschluss-Elements, das mehrere Zeilen umfasst, passt VS Code die Einrückung an. Dies ist nicht immer erwünscht und daher haben wir vscode.CompletionItem.keepWhitespace hinzugefügt, um dieses Verhalten zu steuern.
Bezeichnungen für Symbolanbieter
Bei der Registrierung eines Dokumentensymbolanbieters kann jetzt eine Bezeichnung (DocumentSymbolProviderMetadata) angegeben werden. Diese Bezeichnung wird in den Breadcrumbs und der Outline-Ansicht angezeigt, wenn ein Dokument mehrere Symbolanbieter hat.
Vorgeschlagene Erweiterungs-APIs
Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich, die Erweiterungsautoren ausprobieren können. Wie immer sind wir an Ihrem Feedback interessiert. So gehen Sie vor, um eine vorgeschlagene API auszuprobieren
- 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 Ihr Projekt.
Beachten Sie, dass Sie keine Erweiterung veröffentlichen können, die eine vorgeschlagene API verwendet. Wir werden wahrscheinlich wichtige Änderungen in der nächsten Version vornehmen und wollen niemals bestehende Erweiterungen brechen.
Benutzerdefinierte Ansichten unterstützen Nachrichtentext
Nachrichten im Baumansicht
Sie können Ihrer Baumansicht jetzt eine Nachricht über die Eigenschaft message in TreeView festlegen.
/**
* An optional human-readable message that will be rendered in the view.
*/
message?: string | MarkdownString;

Intelligente Auswahl und Erweiterungen
Wir haben eine vorgeschlagene API zur Unterstützung der intelligenten Auswahlfunktion hinzugefügt. Heute werden bei Ausführung des Befehls Auswahl erweitern oder Auswahl verkleinern Auswahlbereiche anhand einer schwachen Heuristik berechnet. Während wir daran arbeiten, diese Heuristik zu verbessern, möchten wir auch Erweiterungsautoren einbeziehen. Daher haben wir eine vorgeschlagene API für einen SelectionRangeProvider hinzugefügt.
Technik
Entfernung von WinJS-Promise
Als VS Code startete, war JavaScript noch nicht, was es heute ist. Zum Beispiel gab es keine native Promise und damals entschied sich das Team, WinJS.Promise zu verwenden. Schnell vorgespult bis heute, die Situation ist anders: native Promises sind real und WinJS.Promise ist obsolet.
Deshalb sind wir dabei, von WinJS.Promise wegzukommen. Dies ist kein einfaches Unterfangen, da die API und das Laufzeitverhalten unterschiedlich sind. Wir haben bei etwa 10000 Referenzen auf WinJS.Promise begonnen und sind auf 1471 heruntergekommen, von denen etwa 500 Instanziierungen und keine reinen Typannotationen sind. Wir sind zuversichtlich, dass wir diese epische Reise bald beenden werden!
Fortgesetzte Erkundung von Electron 3.0
Während dieses Meilensteins haben wir die Bündelung von Electron 3.0.0 in VS Code weiter erforscht. Dies ist eine große Electron-Version und kommt mit Chrome 66 und Node.js 10.x (ein großer Sprung nach vorn im Vergleich zu unserer aktuellen Version, die Chrome 61 und Node.js 8.x hat). Wir planen, das Update im Dezember an unsere Insiders-Benutzer weiterzugeben, um zusätzliches Feedback zu sammeln. Wenn Sie helfen möchten, stellen Sie sicher, dass Sie VS Code Insiders installieren.
Community-Problemverfolgung
Die Community hilft uns seit sehr langer Zeit periodisch bei der Problemverfolgung. Da wir immer mehr Probleme (derzeit durchschnittlich 70 pro Tag) gemeldet sehen, haben wir damit begonnen, die aktivsten Community-Mitglieder einzuladen, spezifische Labels zu den Problemen hinzuzufügen, an denen sie arbeiten. Da GitHub keine feingranularen Berechtigungen hat, verwenden wir unseren Issue-Bot, um bestimmte Kommentare aufzufangen und Labels dafür hinzuzufügen. Sehen Sie sich den Abschnitt Vielen Dank unten für Danksagungen an.
Strikte Nullprüfung
Unsere Arbeit zur strengen Nullprüfung der Hauptcodebasis von VS Code wurde fortgesetzt. Wir führen jetzt eine strenge Nullprüfung für etwa 800 Dateien durch und werden diese Arbeit fortsetzen, bis die gesamte Codebasis abgedeckt ist.
Sie können diese technische Anstrengung verfolgen und mehr über den Prozess unter Issue #60565 erfahren.
Beiträge zu Erweiterungen
Unser Team pflegt oder trägt zu einer Reihe von VS Code-Erweiterungen bei. Am bemerkenswertesten in diesem Monat:
GitHub Pull Requests
In diesem Meilenstein haben wir an Verbesserungen für die GitHub Pull Requests-Erweiterung gearbeitet.
Hier sind einige der neuen Funktionen:
- Pull-Anfragen direkt von Ihrem lokalen Branch erstellen.
- Eine Reihe von Quellcodeänderungen auf einer ausgecheckten Pull-Anfrage vorschlagen.
- Statusprüfungsstatusinformationen auf der Pull-Anfrage-Beschreibungsseite anzeigen.
Sie können die vollständigen Release Notes für die Erweiterung unter vscode-pull-request-github Releases lesen.
Bemerkenswerte Fehlerbehebungen
- 37929: Debug-Umgebungen beim Erstellen des Dropdown-Menüs nicht aktivieren
- 60187: Debugger wird nicht von Breakpoints im Jest-Test erreicht
- 61590: Einstellungen und Tastenkombinationen-Editor zeigen Editor-Aktionen konsistent an
- 62370: Verbesserte Diagnostik-Hovers im Editor
- 62500: "Bis zur Cursorzeile ausführen" zum Befehlspalette hinzufügen
- 62778: Zentrierte Layout-Größe wird nicht wiederhergestellt
- 63618: Debugging von Electron 2.0.13 64bit fehlgeschlagen mit Fehler "Cannot connect to runtime process, timeout after 10000ms". Aber erfolgreich auf Electron 32bit
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
- Adrien Becchis (@AdrieanKhisbe): Grammatik-Injektion - Umfassendere Scopes berücksichtigen PR #50534
- David Bailey (@davidbailey00): Remove StartupWMClass aus dem Desktop-Datei-URL-Handler PR #63750
- Anuj (@desaianuj): Darstellung statt Präsentation PR #63477
- Donald Pipowitch (@donaldpipowitch): .hintrc hinzugefügt und .babelrc in JSONC-Grammatik verschoben PR #63759
- Eric Amodio (@eamodio)
- Alexandr Fadeev (@fadeevab): Makefile-Kolorierungstests gemäß der neuesten Grammatik aktualisieren PR #61961
- Guillaume Poussel (@gpoussel): Fix #62278: Unterstützung für IPv6-Links PR #62293
- Aleksandr Filatov (@greybax): Behebt Issue #46816 PR #60404
- Napoleon Oikonomou (@iamnapo): README anzeigen statt Willkommensseite, falls vorhanden PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow): Eintrag zur Suchhistorie hinzufügen, wenn die Suche durch eine Einstellungsänderung ausgelöst wird PR #61993
- Andrii Dieiev (@IllusionMH): Option zur Steuerung der Ausrichtung von Aktionen in Suchergebnissen PR #63457
- joan xie (@infinnie): Horizontale Ausrichtung des Menüs PR #61454
- Matt Q (@irrationalRock): Fix #34345 - Befehl hinzugefügt, der mehrere Cursor zum Ende/Anfang der Datei hinzufügt PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz: KSH-Skripte als Shell-Skripte automatisch erkennen PR #62838
- karan verma (@karanisverma): fix: #55946 Kommentar-Snippet-Variable hinzugefügt PR #63572
- Krish De Souza (@Kedstar99): checkForSnapUpdate in updateService.linux.ts korrigiert, um die Snap-Version korrekt zu identifizieren PR #63716
- Benjamin Lannon (@lannonbr): Möglichkeit hinzugefügt, Erweiterungsinformationen in die Zwischenablage zu kopieren PR #56514
- Luo Wenqing (@laphets): Warnungen vor letzten Merge-Konflikten beheben, wenn autoNavigateNextConflict aktiviert ist PR #62788
- Matthew Leon (@leonm1): Fix #62785 leere Zeilen im Debug-Konsolen-Kopieren behoben PR #62823
- Bruno Logerfo (@Logerfo): Strikte Nullprüfungen für keyboardMapperTestUtils PR #63027
- Mathias Rasmussen (@mathiasvr): Fix #60002 Letzten Commit rückgängig machen: gestagte Dateien beibehalten PR #60104
- Matt Crupi (@mmcru): Fix #63295: Sudo in der Fehlermeldung "Speichern unter Linux" referenzieren PR #63394
- Philip Arola (@philiparola): 'overwrite' in Einstellungsbildschirmen in 'override' ändern PR #61926
- Samuel Toriel (@riltsken): [fix] #27649 IntelliSense-Dokumentations-Widget oben anheften PR #62115
- Ryan Scott (@rscott): Git:Fetch (prune) hinzufügen PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner): Tippfehler in Kommentaren beheben PR #62117
- Thomas Struller-Baumann (@Thomas-S-B): Unnötige Typumwandlung entfernt PR #63947
- Alexander (@usernamehw)
- Konrad Borowski (@xfix): Versehentliches Durchfallen im Snapshot-Lader beheben PR #62294
- Yisrael Veller (@YisraelV)
Beiträge zu vscode-vsce
- Nikolay Kondratyev (@kondratyev-nv): Veröffentlichung mit spezifischer Version beheben PR #307
Beiträge zu vscode-eslint
- AnguloHerrera (@angulito): Pipeline verbessern PR #569
Beiträge zu language-server-protocol
- Jan Keromnes (@jankeromnes): Kleinere Verbesserungen: Tippfehler, Grammatik, Wortwahl. PR #579
- Adolfo Ochagavía (@aochagavia): Tippfehler in der Spezifikation beheben PR #597
Beiträge zu vscode-languageserver-node
- Remy Suen (@rcjsuen): Metadaten über Symbole mit DefinitionLink bereitstellen PR #415
- Guillaume Martres (@smarter): asVersionedTextDocumentIdentifier zur Converter-Schnittstelle hinzufügen PR #421
Beiträge zu vscode-html-languageservice
Beiträge zu vscode-generator-code
- Graham Bartley (@grabartley): Git-bezogene Dateien werden nicht mehr erstellt, wenn kein Git-Repository erstellt wird PR #141
Beiträge zu debug-adapter-protocol
- Danny Tuppeny (@DanTup): Link zum Dart-Plugin korrigieren PR #16
Beiträge zu vscode-chrome-debug-core
- @digeff: Keine src-Änderungsereignisse für Speicherquellen senden PR #378
- Shennie Yao (@Shenniey)
Beiträge zu vscode-chrome-debug
- Shennie Yao (@Shenniey): Runtime-Argument-Telemetrie für Chrome-Befehlszeilenschalter hinzufügen PR #749
- Leslie Leigh (@shrinktofit): Option targetTypes korrigieren PR #760
Beiträge zu vscode-azure-account
- Yujin Hong (@yujhongmicrosoft): Unterstützung für die Anmeldung bei Sovereigns hinzufügen PR #79
- Zhe Li (@Sneezry): Problem bei der Azure China-Anmeldung beheben PR #104
- Mateus Amin (@MateusAmin): README mit Einstellungen aktualisieren PR #107
Beiträge zu vscode-recipes
- Damon Jablons (@blackrobot): Markdown-Formatierung für das Python-Rezept bereinigen PR #172
- Vinícius Salomão (@vizeke): PHP mit VS Code ausführen und debuggen PR #169
Beiträge zu localization
Es gibt fast 1400 Mitglieder im Transifex-Team des VS Code-Projekts, mit etwa 100 aktiven Mitwirkenden pro Monat. Wir schätzen Ihre Beiträge, sei es durch neue Übersetzungen, Abstimmungen über Übersetzungen oder Vorschläge zur Prozessverbesserung.
Hier ist eine Momentaufnahme der Mitwirkenden für diese Version. Details zum Projekt, einschließlich der Liste der Mitwirkendennamen, finden Sie auf der Projektseite unter https://aka.ms/vscodeloc.
- Bulgarisch: Любомир Василев.
- Katalanisch: Adolfo Jayme-Barrientos, Enric Soler Rastrollo (MaDDoGo), Oriol Torrillas.
- Tschechisch: Vít Staniček, Ondra Kalousek, Kryštof Černý.
- Dänisch: Johan Fagerberg.
- Finnisch: Feetu Nyrhinen, Jussi Palo, Ahto Simakuutio.
- Französisch: Antoine Griffard, Thierry DEMAN-BARCELO, Adrien Clerbois.
- Deutsch: Carsten Kneip.
- Griechisch: George Xenakis, Christos Koutsiaris, dimipapaioan.
- Hindi: Anand Chalakkal Jose Mohan, Kiren Paul, Ashwini Gupta, amgusain, Pointless Banter, Shaswat Rungta, Adnan Shaikh, Shashida Nand Jha.
- Ungarisch: Tar Dániel.
- Chinesisch vereinfacht: feiyun0112 feiyun0112, Tingting Yi, XIANG ZUO, Tony Xia, G.Y. Z, Dave Young, Jessica Zhang, 驰 雷, Liam Kennedy, bh wu, WangCG duoduobear, ziqiang sun, 正元 刘, 越 郑, peng wei, xiong Fu, 吉姆 舒, 瑜 周, 仁松 陈, Jiang LI.
- Chinesisch traditionell: Winnie Lin , Duran Hsieh, Hans Chiu, Alan Liu.
- Indonesisch: Laurensius Dede Suhardiman, Wildan Mubarok, Joshua Siagian, Rizki A. Wibowo.
- Japanisch: Satoshi Kajiura, Shunya Tajima, Yuichi Nukiyama, Yoshihisa Ozaki, dkp sk, Hiroyuki Mori.
- Kannada: Sanjay !, Sushmit Patil.
- Malayalam: Kiren Paul, Anand Chalakkal Jose Mohan.
- Norwegisch: Espen Klein Nilsen, Ivar L, Simen Dæhlin, Daniel Bjørnbakk.
- Polnisch: Artur.
- Portugiesisch (Brasilien): Danilo Dantas, Thiago Custodio, Vinicius Ribeiro, Lucas Santos, Gabriel Henrique Oliveira de Mello.
- Rumänisch: Szauka.
- Russisch: Mikhail Zabaluev, Acupofspirt, Ilya Umnov.
- Singalesisch: Anand Chalakkal Jose Mohan.
- Spanisch: Jorge Serrano Pérez, Alejandro Medina, Alberto Poblacion, Carlos Longarela, Carlos Mendible, Guillermo Callaghan, Alfonso Jesus Flores Alvarado, Andy Gonzalez.
- Tamil: Vijay Nirmal, Avinash, Jeyanthinath Muthuram, Narayanan Singaram.
- Telugu: Raja Tirumala Rao Guna.
- Türkisch: Eyüp DALAN, Mustafa Turhan, Türker YILDIRIM.
- Vietnamesisch: Nguyễn Nhật Tân.