Leitfaden zur Sprachkonfiguration
Der contributes.languages-Beitragspunkt ermöglicht es Ihnen, eine Sprachkonfiguration zu definieren, die die folgenden deklarativen Sprachfunktionen steuert
- Kommentar-Umschaltung
- Klammerdefinition
- Automatisches Schließen
- Automatische Umschließung
- Faltung (Code-Faltung)
- Wortmuster
- Einrückungsregeln
Hier ist ein Beispiel für eine Sprachkonfiguration, das die Bearbeitungserfahrung für JavaScript-Dateien konfiguriert. Dieser Leitfaden erklärt den Inhalt von language-configuration.json
Hinweis: Wenn der Name Ihrer Sprachkonfigurationsdatei language-configuration.json lautet oder damit endet, erhalten Sie in VS Code Autovervollständigung und Validierung.
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
],
"autoCloseBefore": ";:.,=}])>` \n\t",
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
],
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
"end": "^\\s*//\\s*#?endregion\\b"
}
},
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)",
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
Kommentar-Umschaltung
VS Code bietet zwei Befehle für die Kommentar-Umschaltung: Zeilenkommentar umschalten und Blockkommentar umschalten. Sie können comments.blockComment und comments.lineComment angeben, um zu steuern, wie VS Code Zeilen/Blöcke auskommentieren soll.
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
}
}
Klammerdefinition
Wenn Sie den Cursor auf eine hier definierte Klammer bewegen, hebt VS Code diese Klammer zusammen mit ihrem übereinstimmenden Gegenstück hervor.
{
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
]
}
Darüber hinaus verwendet VS Code beim Ausführen von Zur Klammer gehen oder Bis zur Klammer auswählen die obige Definition, um die nächstgelegene Klammer und ihr übereinstimmendes Gegenstück zu finden.
Automatisches Schließen
Wenn Sie ' eingeben, erstellt VS Code ein Paar von einfachen Anführungszeichen und platziert Ihren Cursor in der Mitte: '|'. Dieser Abschnitt definiert solche Paare.
{
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
]
}
Der Schlüssel notIn deaktiviert diese Funktion in bestimmten Codebereichen. Wenn Sie beispielsweise den folgenden Code schreiben
// ES6's Template String
`ES6's Template String`;
Das einfache Anführungszeichen wird nicht automatisch geschlossen.
Paare, die keine notIn-Eigenschaft benötigen, können auch eine einfachere Syntax verwenden
{
"autoClosingPairs": [
["{", "}"],
["[", "]"]
]
}
Benutzer können das Verhalten des automatischen Schließens mit den Einstellungen editor.autoClosingQuotes und editor.autoClosingBrackets anpassen.
Automatisches Schließen vor
Standardmäßig schließt VS Code Paare nur automatisch, wenn sich direkt nach dem Cursor ein Leerzeichen befindet. Wenn Sie also { in folgendem JSX-Code eingeben, würden Sie keine automatische Schließung erhalten
const Component = () =>
<div className={>
^ Does not get autoclosed by default
</div>
Diese Definition überschreibt dieses Verhalten jedoch
{
"autoCloseBefore": ";:.,=}])>` \n\t"
}
Wenn Sie nun { direkt vor > eingeben, schließt VS Code es automatisch mit }.
Automatische Umschließung
Wenn Sie in VS Code einen Bereich auswählen und eine öffnende Klammer eingeben, umschließt VS Code den ausgewählten Inhalt mit einem Klammerpaar. Diese Funktion heißt automatische Umschließung, und hier können Sie die automatischen Umschließungspaare für eine bestimmte Sprache definieren
{
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}
Benutzer können das Verhalten der automatischen Umschließung mit der Einstellung editor.autoSurround anpassen.
Faltung (Code-Faltung)
In VS Code wird die Faltung entweder einrückungsbasiert definiert oder durch beigesteuerte Faltungsbereichsanbieter
- Einrückungsbasierte Faltung mit Markern: Wenn kein Faltungsbereichsanbieter für die gegebene Sprache verfügbar ist oder wenn der Benutzer
editor.foldingStrategyaufindentationgesetzt hat, wird die einrückungsbasierte Faltung verwendet. Ein Faltungsbereich beginnt, wenn eine Zeile eine geringere Einrückung als eine oder mehrere folgende Zeilen hat, und endet, wenn eine Zeile mit der gleichen oder einer geringeren Einrückung vorhanden ist. Leere Zeilen werden ignoriert. Zusätzlich kann die Sprachkonfiguration Start- und Endmarker definieren. Diese werden alsstartundendRegexes infolding.markersdefiniert. Wenn übereinstimmende Zeilen gefunden werden, wird ein Faltungsbereich innerhalb des Paares erstellt. Faltungsmarker müssen nicht leer sein und sehen typischerweise so aus wie//#regionund//#endregion.
Das folgende JSON erstellt Faltungsmarker für //#region und //#endregion.
{
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
"end": "^\\s*//\\s*#?endregion\\b"
}
}
}
- Sprachserver-Faltung: Der Sprachserver antwortet auf die
textDocument/foldingRange-Anfrage mit einer Liste von Faltungsbereichen, und VS Code rendert die Bereiche als Faltungsmarker. Erfahren Sie mehr über die Faltungsunterstützung im Language Server Protocol im Thema Programmatische Sprachfunktionen.
Wortmuster
wordPattern definiert, was in der Programmiersprache als Wort gilt. Code-Vorschlagsfunktionen verwenden diese Einstellung, um Wortgrenzen zu bestimmen, wenn wordPattern gesetzt ist. Beachten Sie, dass diese Einstellung Wort-bezogene Editorbefehle nicht beeinflusst, die von der Editor-Einstellung editor.wordSeparators gesteuert werden.
{
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
}
Einrückungsregeln
indentationRules definiert, wie der Editor die Einrückung der aktuellen Zeile oder der nächsten Zeile anpassen soll, wenn Sie tippen, einfügen und Zeilen verschieben.
{
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
Zum Beispiel passt if (true) { auf increaseIndentPattern, und wenn Sie dann Enter nach der öffnenden Klammer { drücken, wird der Editor automatisch einmal eingerückt und Ihr Code sieht dann so aus
if (true) {
console.log();
Zusätzlich zu increaseIndentPattern und decreaseIndentPattern gibt es zwei weitere Einrückungsregeln
indentNextLinePattern- Wenn eine Zeile diesem Muster entspricht, dann soll **nur die nächste Zeile** danach einmal eingerückt werden.unIndentedLinePattern- Wenn eine Zeile diesem Muster entspricht, dann soll ihre Einrückung nicht geändert werden und sie soll nicht gegen die anderen Regeln ausgewertet werden.
Wenn für die Programmiersprache keine Einrückungsregel festgelegt ist, rückt der Editor ein, wenn die Zeile mit einer öffnenden Klammer endet, und rückt aus, wenn Sie eine schließende Klammer eingeben. Die Klammer wird hier durch brackets definiert.
Beachten Sie, dass die Einstellung editor.formatOnPaste von der DocumentRangeFormattingEditProvider gesteuert wird und nicht von der automatischen Einrückung beeinflusst wird.
Bei Enter-Regeln
onEnterRules definiert eine Liste von Regeln, die ausgewertet werden, wenn Enter im Editor gedrückt wird.
{
"onEnterRules": [
{
"beforeText": "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\s*$",
"action": { "indent": "indent" }
}
]
}
Beim Drücken von Enter wird der Text vor, nach oder eine Zeile oberhalb des Cursors anhand der folgenden Eigenschaften geprüft
beforeText(obligatorisch). Ein regulärer Ausdruck, der mit dem Text vor dem Cursor übereinstimmt (begrenzt auf die aktuelle Zeile).afterText. Ein regulärer Ausdruck, der mit dem Text nach dem Cursor übereinstimmt (begrenzt auf die aktuelle Zeile).previousLineText. Ein regulärer Ausdruck, der mit dem Text eine Zeile oberhalb des Cursors übereinstimmt.
Wenn alle angegebenen Eigenschaften übereinstimmen, gilt die Regel als übereinstimmend und keine weiteren onEnterRules werden ausgewertet. Eine onEnterRule kann die folgenden Aktionen angeben
indent(obligatorisch). Einer vonnone, indent, outdent, indentOutdent.nonebedeutet, dass die neue Zeile die Einrückung der aktuellen Zeile erbt.indentbedeutet, dass die neue Zeile relativ zur aktuellen Zeile eingerückt wird.outdentbedeutet, dass die neue Zeile relativ zur aktuellen Zeile aus der Einrückung herausgenommen wird.indentOutdentbedeutet, dass zwei neue Zeilen eingefügt werden, eine eingerückt und die zweite aus der Einrückung herausgenommen.
appendText. Eine Zeichenkette, die nach der neuen Zeile und nach der Einrückung angehängt wird.removeText. Die Anzahl der Zeichen, die aus der Einrückung der neuen Zeile entfernt werden.