Emmet in Visual Studio Code
Die Unterstützung für Emmet-Snippets und -Erweiterungen ist direkt in Visual Studio Code integriert, keine Erweiterung erforderlich. Emmet 2.0 unterstützt die Mehrheit der Emmet-Aktionen, einschließlich der Erweiterung von Emmet-Abkürzungen und Snippets.
Emmet-Abkürzungen und Snippets erweitern
Emmet-Abkürzungs- und Snippet-Erweiterungen sind standardmäßig in html-, haml-, pug-, slim-, jsx-, xml-, xsl-, css-, scss-, sass-, less- und stylus-Dateien aktiviert, sowie in jeder Sprache, die von einer der oben genannten Sprachen erbt, wie z. B. handlebars und php.

Wenn Sie beginnen, eine Emmet-Abkürzung zu tippen, sehen Sie die Abkürzung in der Vorschlagsliste. Wenn Sie das Vorschlagsdokumentations-Flyout geöffnet haben, sehen Sie eine Vorschau der Erweiterung, während Sie tippen. Wenn Sie sich in einer Stylesheet-Datei befinden, wird die erweiterte Abkürzung in der Vorschlagsliste sortiert unter den anderen CSS-Vorschlägen angezeigt.
Tab für Emmet-Erweiterungen verwenden
Wenn Sie die Tab-Taste zum Erweitern von Emmet-Abkürzungen verwenden möchten, fügen Sie die folgende Einstellung hinzu
"emmet.triggerExpansionOnTab": true
Diese Einstellung ermöglicht die Verwendung der Tab-Taste für die Einrückung, wenn der Text keine Emmet-Abkürzung ist.
Emmet bei deaktivierten Schnellvorschlägen
Wenn Sie die Einstellung editor.quickSuggestions deaktiviert haben, sehen Sie keine Vorschläge, während Sie tippen. Sie können Vorschläge immer noch manuell auslösen, indem Sie ⌃Space (Windows, Linux Ctrl+Space) drücken und die Vorschau sehen.
Emmet in Vorschlägen deaktivieren
Wenn Sie Emmet-Abkürzungen überhaupt nicht in Vorschlägen sehen möchten, verwenden Sie die folgende Einstellung
"emmet.showExpandedAbbreviation": "never"
Sie können immer noch den Befehl Emmet: Abkürzung erweitern verwenden, um Ihre Abkürzungen zu erweitern. Sie können auch jede Tastenkombination an die Befehls-ID editor.emmet.action.expandAbbreviation binden.
Reihenfolge von Emmet-Vorschlägen
Um sicherzustellen, dass Emmet-Vorschläge immer an erster Stelle in der Vorschlagsliste stehen, fügen Sie die folgenden Einstellungen hinzu
"emmet.showSuggestionsAsSnippets": true,
"editor.snippetSuggestions": "top"
Emmet-Abkürzungen in anderen Dateitypen
Um die Emmet-Abkürzungserweiterung in Dateitypen zu aktivieren, in denen sie standardmäßig nicht verfügbar ist, verwenden Sie die Einstellung emmet.includeLanguages. Stellen Sie sicher, dass Sie für beide Seiten der Zuordnung Sprachidentifikatoren verwenden, wobei die rechte Seite der Sprachidentifikator einer von Emmet unterstützten Sprache ist (siehe Liste oben).
Zum Beispiel
"emmet.includeLanguages": {
"javascript": "javascriptreact",
"razor": "html",
"plaintext": "pug"
}
Emmet hat keine Kenntnis von diesen neuen Sprachen, und so können Emmet-Vorschläge in Nicht-HTML/CSS-Kontexten angezeigt werden. Um dies zu vermeiden, können Sie die folgende Einstellung verwenden.
"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly"
Hinweis: Wenn Sie zuvor emmet.syntaxProfiles verwendet haben, um neue Dateitypen zuzuordnen, sollten Sie ab VS Code 1.15 stattdessen die Einstellung emmet.includeLanguages verwenden. emmet.syntaxProfiles ist nur für die Anpassung der endgültigen Ausgabe gedacht.
Emmet mit Multi-Cursors
Sie können die meisten Emmet-Aktionen auch mit Multi-Cursors verwenden

Filter verwenden
Filter sind spezielle Post-Prozessoren, die die erweiterte Abkürzung ändern, bevor sie im Editor ausgegeben wird. Es gibt 2 Möglichkeiten, Filter zu verwenden: entweder global über die Einstellung emmet.syntaxProfiles oder direkt in der aktuellen Abkürzung.
Unten ist ein Beispiel für den ersten Ansatz, der die Einstellung emmet.syntaxProfiles verwendet, um den bem-Filter für alle Abkürzungen in HTML-Dateien anzuwenden
"emmet.syntaxProfiles": {
"html": {
"filters": "bem"
}
}
Um einen Filter nur für die aktuelle Abkürzung bereitzustellen, fügen Sie den Filter an Ihre Abkürzung an. Zum Beispiel: div#page|c wendet den comment-Filter auf die Abkürzung div#page an.
BEM-Filter (bem)
Wenn Sie den Block Element Modifier (BEM)-Ansatz zum Schreiben von HTML verwenden, dann sind bem-Filter für Sie sehr praktisch. Um mehr darüber zu erfahren, wie Sie bem-Filter verwenden können, lesen Sie BEM filter in Emmet.
Sie können diesen Filter anpassen, indem Sie die Präferenzen bem.elementSeparator und bem.modifierSeparator verwenden, wie in Emmet Preferences dokumentiert.
Kommentarfilter (c)
Dieser Filter fügt Kommentare um wichtige Tags hinzu. Standardmäßig sind "wichtige Tags" solche Tags mit einem ID- und/oder Klassenattribut.
Zum Beispiel div>div#page>p.title+p|c wird erweitert zu
<div>
<div id="page">
<p class="title"></p>
<!-- /.title -->
<p></p>
</div>
<!-- /#page -->
</div>
Sie können diesen Filter anpassen, indem Sie die Präferenzen filter.commentTrigger, filter.commentAfter und filter.commentBefore verwenden, wie in Emmet Preferences dokumentiert.
Das Format für die Präferenz filter.commentAfter ist in VS Code Emmet 2.0 anders.
Zum Beispiel, anstatt
"emmet.preferences": {
"filter.commentAfter": "\n<!-- /<%= attr('id', '#') %><%= attr('class', '.') %> -->"
}
würden Sie in VS Code eine einfachere verwenden
"emmet.preferences": {
"filter.commentAfter": "\n<!-- /[#ID][.CLASS] -->"
}
Trim-Filter (t)
Dieser Filter ist nur anwendbar, wenn Abkürzungen für den Befehl Emmet: Mit Abkürzung umschließen angegeben werden. Er entfernt Zeilenmarkierungen von umgeschlossenen Zeilen.
Benutzerdefinierte Emmet-Snippets verwenden
Benutzerdefinierte Emmet-Snippets müssen in einer JSON-Datei namens snippets.json definiert werden. Die Einstellung emmet.extensionsPath sollte den Pfad zu dem Verzeichnis enthalten, das diese Datei enthält.
Unten ist ein Beispiel für den Inhalt dieser snippets.json-Datei.
{
"html": {
"snippets": {
"ull": "ul>li[id=${1} class=${2}]*2{ Will work with html, pug, haml and slim }",
"oll": "<ol><li id=${1} class=${2}> Will only work in html </ol>",
"ran": "{ Wrap plain text in curly braces }"
}
},
"css": {
"snippets": {
"cb": "color: black",
"bsd": "border: 1px solid ${1:red}",
"ls": "list-style: ${1}"
}
}
}
Das Erstellen von benutzerdefinierten Snippets in Emmet 2.0 über die Datei snippets.json unterscheidet sich in einigen Punkten vom alten Vorgehen
| Thema | Altes Emmet | Emmet 2.0 |
|---|---|---|
| Snippets vs. Abkürzungen | Unterstützt beide in 2 separaten Eigenschaften namens snippets und abbreviations |
Die beiden wurden zu einer einzigen Eigenschaft namens snippets zusammengefasst. Siehe Standard- HTML-Snippets und CSS-Snippets |
| Namen von CSS-Snippets | Kann : enthalten |
Verwenden Sie keine : bei der Definition von Snippet-Namen. Sie wird verwendet, um den Eigenschaftsnamen und den Wert zu trennen, wenn Emmet versucht, die gegebene Abkürzung mit einem der Snippets abzugleichen. |
| Werte von CSS-Snippets | Kann mit ; enden |
Fügen Sie am Ende des Snippet-Werts kein ; hinzu. Emmet fügt das abschließende ; basierend auf dem Dateityp (css/less/scss vs sass/stylus) oder der Emmet-Einstellung für css.propertyEnd, sass.propertyEnd, stylus.propertyEnd hinzu. |
| Cursorposition | ${cursor} oder | kann verwendet werden |
Verwenden Sie nur Textmate-Syntax wie ${1} für Tabulatoren und Cursorpositionen |
HTML Emmet Snippets
HTML-Benutzersnippets sind auf alle anderen Markup-Flavors wie haml oder pug anwendbar. Wenn der Snippet-Wert eine Abkürzung und kein tatsächliches HTML ist, können die entsprechenden Transformationen angewendet werden, um die richtige Ausgabe für den jeweiligen Sprachtyp zu erhalten.
Zum Beispiel, für eine ungeordnete Liste mit einem Listenelement, wenn Ihr Snippet-Wert ul>li ist, können Sie denselben Snippet in html, haml, pug oder slim verwenden, aber wenn Ihr Snippet-Wert <ul><li></li></ul> ist, dann funktioniert er nur in html-Dateien.
Wenn Sie einen Snippet für einfachen Text wünschen, umschließen Sie den Text mit {}.
CSS Emmet Snippets
Werte für CSS Emmet Snippets sollten ein vollständiges Eigenschaftsnamen- und Wert-Paar sein.
CSS-Benutzersnippets sind auf alle anderen Stylesheet-Flavors wie scss, less oder sass anwendbar. Fügen Sie daher am Ende des Snippet-Werts kein abschließendes ; hinzu. Emmet fügt es nach Bedarf hinzu, je nachdem, ob die Sprache es benötigt.
Verwenden Sie keine : im Snippet-Namen. : wird verwendet, um den Eigenschaftsnamen und den Wert zu trennen, wenn Emmet versucht, die Abkürzung mit einem der Snippets abzugleichen.
Tabulatoren und Cursor in benutzerdefinierten Snippets
Die Syntax für Tabulatoren in benutzerdefinierten Emmet-Snippets folgt der Textmate-Snippet-Syntax.
- Verwenden Sie
${1},${2}für Tabulatoren und${1:placeholder}für Tabulatoren mit Platzhaltern. - Zuvor wurden
|oder${cursor}verwendet, um die Cursorposition im benutzerdefinierten Emmet-Snippet zu bezeichnen. Dies wird nicht mehr unterstützt. Verwenden Sie stattdessen${1}.
Emmet-Konfiguration
Unten sind Emmet- Einstellungen, die Sie verwenden können, um Ihre Emmet-Erfahrung in VS Code anzupassen.
-
Verwenden Sie diese Einstellung, um eine Zuordnung zwischen der Sprache Ihrer Wahl und einer der von Emmet unterstützten Sprachen hinzuzufügen, um Emmet in der ersteren unter Verwendung der Syntax der letzteren zu aktivieren. Stellen Sie sicher, dass Sie Sprach-IDs für beide Seiten der Zuordnung verwenden.
Zum Beispiel
"emmet.includeLanguages": { "javascript": "javascriptreact", "plaintext": "pug" } -
Wenn es eine Sprache gibt, in der Sie keine Emmet-Erweiterungen sehen möchten, fügen Sie sie in diese Einstellung ein, die ein Array von Sprach-ID-Strings akzeptiert.
-
Siehe Emmet Customization of output profile, um zu erfahren, wie Sie die Ausgabe Ihrer HTML-Abkürzungen anpassen können.
Zum Beispiel
"emmet.syntaxProfiles": { "html": { "attr_quotes": "single" }, "jsx": { "self_closing_tag": true } } -
Passen Sie Variablen an, die von Emmet-Snippets verwendet werden.
Zum Beispiel
"emmet.variables": { "lang": "de", "charset": "UTF-16" } -
emmet.showExpandedAbbreviation
Steuert die Emmet-Vorschläge, die in der Vorschlags-/Vervollständigungsliste angezeigt werden.
Einstellungswert Beschreibung neverZeigen Sie Emmet-Abkürzungen niemals in der Vorschlagsliste für eine beliebige Sprache an. inMarkupAndStylesheetFilesOnlyZeigen Sie Emmet-Vorschläge nur für Sprachen an, die rein Markup- und Stylesheet-basiert sind ('html', 'pug', 'slim', 'haml', 'xml', 'xsl', 'css', 'scss', 'sass', 'less', 'stylus'). alwaysZeigen Sie Emmet-Vorschläge in allen von Emmet unterstützten Modi sowie in Sprachen an, die eine Zuordnung in der Einstellung emmet.includeLanguages haben. Hinweis: Im Modus
alwaysist die neue Emmet-Implementierung nicht kontextsensitiv. Wenn Sie beispielsweise eine JavaScript-React-Datei bearbeiten, erhalten Sie Emmet-Vorschläge nicht nur beim Schreiben von Markup, sondern auch beim Schreiben von JavaScript. -
emmet.showAbbreviationSuggestions
Zeigt mögliche Emmet-Abkürzungen als Vorschläge an. Standardmäßig ist dies
true.Wenn Sie beispielsweise
lieingeben, erhalten Sie Vorschläge für alle Emmet-Snippets, die mitlibeginnen, wielink,link:css,link:faviconusw. Dies ist hilfreich, um Emmet-Snippets zu lernen, von denen Sie nie wussten, dass sie existieren, es sei denn, Sie kennen die Emmet-Cheat-Sheet auswendig.Nicht anwendbar in Stylesheets oder wenn emmet.showExpandedAbbreviation auf
nevergesetzt ist. -
Geben Sie den Speicherort des Verzeichnisses an, das die Datei
snippets.jsonenthält, welche wiederum Ihre benutzerdefinierten Snippets enthält. -
Setzen Sie dies auf true, um Emmet-Abkürzungen mit der Tab-Taste zu erweitern. Wir verwenden diese Einstellung, um die entsprechende Fallback-Lösung für die Einrückung bereitzustellen, wenn keine Abkürzung zum Erweitern vorhanden ist.
-
emmet.showSuggestionsAsSnippets
Wenn auf
truegesetzt, werden Emmet-Vorschläge zusammen mit anderen Snippets gruppiert, was es Ihnen ermöglicht, sie gemäß der Einstellung editor.snippetSuggestions zu sortieren. Setzen Sie dies auftrueund editor.snippetSuggestions auftop, um sicherzustellen, dass Emmet-Vorschläge immer an erster Stelle unter den anderen Vorschlägen erscheinen. -
Sie können diese Einstellung verwenden, um Emmet anzupassen, wie in den Emmet Preferences dokumentiert. Die folgenden Anpassungen werden derzeit unterstützt
css.propertyEndcss.valueSeparatorsass.propertyEndsass.valueSeparatorstylus.propertyEndstylus.valueSeparatorcss.unitAliasescss.intUnitcss.floatUnitbem.elementSeparatorbem.modifierSeparatorfilter.commentBeforefilter.commentTriggerfilter.commentAfterformat.noIndentTagsformat.forceIndentationForTagsprofile.allowCompactBooleancss.fuzzySearchMinScore
Das Format für die Präferenz
filter.commentAfterist in Emmet 2.0 anders und einfacher.Zum Beispiel, anstatt des älteren Formats
"emmet.preferences": { "filter.commentAfter": "\n<!-- /<%= attr('id', '#') %><%= attr('class', '.') %> -->" }würden Sie verwenden
"emmet.preferences": { "filter.commentAfter": "\n<!-- /[#ID][.CLASS] -->" }Wenn Sie Unterstützung für andere Präferenzen wünschen, die in den Emmet Preferences dokumentiert sind, reichen Sie bitte eine Feature Request ein.
Nächste Schritte
Emmet ist nur eine der großartigen Webentwickler-Funktionen in VS Code. Lesen Sie weiter, um mehr zu erfahren über
- HTML - VS Code unterstützt HTML mit IntelliSense, schließenden Tags und Formatierung.
- CSS - Wir bieten umfassende Unterstützung für CSS, SCSS und Less.
Fehlerbehebung
Benutzerdefinierte Tags werden in der Vorschlagsliste nicht erweitert
Benutzerdefinierte Tags, wenn sie in einem Ausdruck wie MyTag>YourTag oder MyTag.someclass verwendet werden, erscheinen in der Vorschlagsliste. Aber wenn sie allein wie MyTag verwendet werden, erscheinen sie nicht in der Vorschlagsliste. Dies ist so konzipiert, um Lärm in der Vorschlagsliste zu vermeiden, da jedes Wort ein potenzielles benutzerdefiniertes Tag ist.
Fügen Sie die folgende Einstellung hinzu, um die Erweiterung von Emmet-Abkürzungen mit Tab zu aktivieren, was benutzerdefinierte Tags in allen Fällen erweitert.
"emmet.triggerExpansionOnTab": true
Meine HTML-Snippets, die mit + enden, funktionieren nicht
HTML-Snippets, die mit + enden, wie select+ und ul+ aus der Emmet-Cheat-Sheet, werden nicht unterstützt. Dies ist ein bekanntes Problem in Emmet 2.0 Issue: emmetio/html-matcher#1. Eine Umgehung ist, Ihre eigenen benutzerdefinierten Emmet-Snippets für solche Szenarien zu erstellen.
Abkürzungen werden nicht erweitert
Überprüfen Sie zuerst, ob Sie benutzerdefinierte Snippets verwenden (wenn eine Datei snippets.json von der Einstellung emmet.extensionsPath erfasst wird). Das Format benutzerdefinierter Snippets hat sich in VS Code Version 1.53 geändert. Anstatt | zu verwenden, um die Cursorposition anzugeben, verwenden Sie stattdessen Tokens wie ${1}, ${2} usw. Die Standard-CSS-Snippets-Datei aus dem emmetio/emmet-Repository zeigt Beispiele für das neue Cursorpositionsformat.
Wenn Abkürzungen immer noch nicht erweitert werden
- Überprüfen Sie die eingebauten Erweiterungen, um zu sehen, ob Emmet deaktiviert wurde.
- Versuchen Sie, den Erweiterungshost neu zu starten, indem Sie den Befehl Entwickler: Erweiterungshost neu starten (
workbench.action.restartExtensionHost) in der Befehlspalette ausführen.
Wo kann ich alle Präferenzen einstellen, wie in den Emmet preferences dokumentiert?
Sie können die Präferenzen über die Einstellung emmet.preferences einstellen. Nur eine Teilmenge der Präferenzen, die in den Emmet preferences dokumentiert sind, kann angepasst werden. Bitte lesen Sie den Präferenzabschnitt unter Emmet-Konfiguration.
Gibt es Tipps und Tricks?
Natürlich!
- In CSS-Abkürzungen wird, wenn Sie
:verwenden, der linke Teil zur Fuzzy-Übereinstimmung mit dem CSS-Eigenschaftsnamen und der rechte Teil zur Übereinstimmung mit dem CSS-Eigenschaftswert verwendet. Nutzen Sie dies voll aus, indem Sie Abkürzungen wiepos:f,trf:rx,fw:busw. verwenden. - Erkunden Sie alle anderen Emmet-Funktionen, wie in den Emmet Actions dokumentiert.
- Zögern Sie nicht, Ihre eigenen benutzerdefinierten Emmet-Snippets zu erstellen.