언어 구성 가이드
contributes.languages 기여 포인트는 다음 선언적 언어 기능을 제어하는 언어 구성을 정의할 수 있도록 합니다.
- 주석 토글
- 괄호 정의
- 자동 닫기
- 자동 감싸기
- 폴딩
- 단어 패턴
- 들여쓰기 규칙
JavaScript 파일의 편집 경험을 구성하는 언어 구성 샘플입니다. 이 가이드에서는 language-configuration.json의 내용을 설명합니다.
참고: 언어 구성 파일 이름이 language-configuration.json이거나 해당 이름으로 끝나는 경우 VS Code에서 자동 완성 및 유효성 검사를 받을 수 있습니다.
{
"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*[\\)\\}\\]].*$"
}
}
주석 토글
VS Code는 주석 토글에 대해 줄 주석 토글 및 블록 주석 토글의 두 가지 명령을 제공합니다. comments.blockComment 및 comments.lineComment를 지정하여 VS Code가 줄/블록을 주석 처리하는 방법을 제어할 수 있습니다.
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
}
}
괄호 정의
여기에 정의된 괄호로 커서를 이동하면 VS Code는 해당 괄호와 일치하는 쌍을 함께 강조 표시합니다.
{
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
]
}
또한 괄호로 이동 또는 괄호까지 선택을 실행할 때 VS Code는 위 정의를 사용하여 가장 가까운 괄호와 일치하는 쌍을 찾습니다.
자동 닫기
'를 입력하면 VS Code는 작은따옴표 쌍을 만들고 커서를 가운데에 둡니다: '|'. 이 섹션은 이러한 쌍을 정의합니다.
{
"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"] }
]
}
notIn 키는 특정 코드 범위에서 이 기능을 비활성화합니다. 예를 들어 다음 코드를 작성할 때
// ES6's Template String
`ES6's Template String`;
작은따옴표는 자동으로 닫히지 않습니다.
notIn 속성이 필요하지 않은 쌍은 더 간단한 구문을 사용할 수도 있습니다.
{
"autoClosingPairs": [
["{", "}"],
["[", "]"]
]
}
사용자는 editor.autoClosingQuotes 및 editor.autoClosingBrackets 설정을 사용하여 자동 닫기 동작을 조정할 수 있습니다.
이전 자동 닫기
기본적으로 VS Code는 커서 바로 뒤에 공백이 있는 경우에만 쌍을 자동으로 닫습니다. 따라서 다음 JSX 코드에서 {를 입력하면 자동 닫기가 되지 않습니다.
const Component = () =>
<div className={>
^ Does not get autoclosed by default
</div>
그러나 이 정의는 해당 동작을 재정의합니다.
{
"autoCloseBefore": ";:.,=}])>` \n\t"
}
이제 > 바로 앞에 {를 입력하면 VS Code는 }로 자동으로 닫습니다.
자동 감싸기
VS Code에서 범위를 선택하고 여는 괄호를 입력하면 VS Code가 선택한 내용을 괄호 쌍으로 감쌉니다. 이 기능을 자동 감싸기라고 하며, 특정 언어에 대한 자동 감싸기 쌍을 정의할 수 있습니다.
{
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}
사용자는 editor.autoSurround 설정을 사용하여 자동 감싸기 동작을 조정할 수 있습니다.
폴딩
VS Code에서 접기는 들여쓰기 기반으로 정의되거나 기여된 접기 범위 제공자로 정의됩니다.
- 마커를 사용한 들여쓰기 기반 접기: 주어진 언어에 대한 접기 범위 제공자가 없거나 사용자가
editor.foldingStrategy를indentation으로 설정한 경우 들여쓰기 기반 접기가 사용됩니다. 접기 영역은 줄의 들여쓰기가 하나 이상의 다음 줄보다 작을 때 시작하고, 같은 줄 또는 더 작은 들여쓰기의 줄이 있을 때 끝납니다. 빈 줄은 무시됩니다. 또한 언어 구성은 시작 및 끝 마커를 정의할 수 있습니다. 이는folding.markers에서start및end정규식으로 정의됩니다. 일치하는 줄이 발견되면 해당 쌍 안의 접기 영역이 생성됩니다. 접기 마커는 비어 있지 않아야 하며 일반적으로//#region및//#endregion과 유사합니다.
다음 JSON은 //#region 및 //#endregion에 대한 접기 마커를 생성합니다.
{
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
"end": "^\\s*//\\s*#?endregion\\b"
}
}
}
- 언어 서버 접기: 언어 서버는
textDocument/foldingRange요청에 대한 응답으로 접기 범위 목록을 반환하고 VS Code는 해당 범위를 접기 마커로 렌더링합니다. 언어 서버 프로토콜의 접기 지원에 대한 자세한 내용은 프로그램식 언어 기능 주제를 참조하십시오.
단어 패턴
wordPattern은 프로그래밍 언어에서 단어로 간주되는 것을 정의합니다. 코드 제안 기능은 wordPattern이 설정된 경우 단어 경계를 결정하는 데 이 설정을 사용합니다. 이 설정은 편집기 설정 editor.wordSeparators에 의해 제어되는 단어 관련 편집기 명령에 영향을 주지 않습니다.
{
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
}
들여쓰기 규칙
indentationRules는 입력, 붙여넣기, 줄 이동 시 편집기가 현재 줄 또는 다음 줄의 들여쓰기를 조정하는 방법을 정의합니다.
{
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
예를 들어 if (true) {는 increaseIndentPattern과 일치하며, 중괄호 { 뒤에서 Enter를 누르면 편집기에서 자동으로 한 번 들여쓰게 되고 코드는 다음과 같이 됩니다.
if (true) {
console.log();
increaseIndentPattern 및 decreaseIndentPattern 외에도 두 가지 다른 들여쓰기 규칙이 있습니다.
indentNextLinePattern- 줄이 이 패턴과 일치하면 **다음 줄만** 한 번 들여쓰입니다.unIndentedLinePattern- 줄이 이 패턴과 일치하면 들여쓰기가 변경되지 않으며 다른 규칙에 대해 평가되지 않습니다.
프로그래밍 언어에 대한 들여쓰기 규칙이 설정되어 있지 않으면 편집기는 줄이 여는 괄호로 끝날 때 들여쓰고 닫는 괄호를 입력할 때 내어씁니다. 여기서 괄호는 brackets에 의해 정의됩니다.
editor.formatOnPaste 설정은 DocumentRangeFormattingEditProvider에 의해 제어되며 자동 들여쓰기에 영향을 받지 않는다는 점에 유의하십시오.
Enter 규칙
onEnterRules는 편집기에서 Enter를 누를 때 평가되는 규칙 목록을 정의합니다.
{
"onEnterRules": [
{
"beforeText": "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\s*$",
"action": { "indent": "indent" }
}
]
}
Enter를 누르면 커서 앞, 뒤 또는 한 줄 위에 있는 텍스트가 다음 속성에 대해 확인됩니다.
beforeText(필수). 커서 앞의 텍스트와 일치하는 정규식 (현재 줄로 제한됨).afterText. 커서 뒤의 텍스트와 일치하는 정규식 (현재 줄로 제한됨).previousLineText. 커서 바로 위 줄의 텍스트와 일치하는 정규식.
지정된 모든 속성이 일치하면 규칙이 일치하는 것으로 간주되며 더 이상 onEnterRules가 평가되지 않습니다. onEnterRule은 다음 작업을 지정할 수 있습니다.
indent(필수).none, indent, outdent, indentOutdent중 하나.none은 새 줄이 현재 줄의 들여쓰기를 상속함을 의미합니다.indent는 새 줄이 현재 줄에 상대적으로 들여쓰기됨을 의미합니다.outdent는 새 줄이 현재 줄에 상대적으로 들여쓰기 해제됨을 의미합니다.indentOutdent는 두 개의 새 줄이 삽입됨을 의미하며, 하나는 들여쓰기되고 다른 하나는 들여쓰기 해제됩니다.
appendText. 새 줄 뒤와 들여쓰기 후에 추가될 문자열.removeText. 새 줄의 들여쓰기에서 제거할 문자 수.