如何在VSCode输入代码时自动在所有可选位置插入分号
概述
我最近发现VSCode有一项出色的功能,支持自定义精细化的自动空格与可选字符处理规则,可在你输入代码时实时生效。
这正是我一直需要的功能。由于解析器插入分号的逻辑并不总是清晰可预测,通常建议开发者手动补全分号,但手动操作负担较重,尤其有下述功能可用的情况下:
但遗憾的是我没能让这项功能达到宣传的效果,具体问题如下。
不一致行为演示

复现步骤:相关设置
{ // 相关、可能相关的配置 "editor.acceptSuggestionOnCommitCharacter": true, "editor.detectIndentation": false, "editor.formatOnPaste": true, "editor.formatOnSave": true, "editor.formatOnType": true, "editor.insertSpaces": false, "editor.trimAutoWhitespace": false, "javascript.format.enable": true, "javascript.format.insertSpaceAfterCommaDelimiter": true, "javascript.format.insertSpaceAfterConstructor": true, "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true, "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": true, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": false, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": true, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": true, "javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, "javascript.format.insertSpaceAfterSemicolonInForStatements": true, "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": true, "javascript.format.insertSpaceBeforeFunctionParenthesis": true, "javascript.format.placeOpenBraceOnNewLineForControlBlocks": false, "javascript.format.placeOpenBraceOnNewLineForFunctions": false, "javascript.format.semicolons": "insert", // 无关、大概率无关的配置 "editor.foldingHighlight": false, "editor.fontFamily": "'Cascadia Mono', 'tic-80 font', 'Courier New', monospace", "editor.fontSize": 13, "editor.glyphMargin": false, "editor.letterSpacing": 0, "editor.lineHeight": 2.5, "editor.lineNumbers": "on", "editor.matchBrackets": "never", "editor.minimap.renderCharacters": false, "editor.occurrencesHighlight": false, "editor.renderControlCharacters": true, "editor.renderWhitespace": "selection", "editor.scrollbar.verticalScrollbarSize": 0, "editor.smoothScrolling": true, "editor.tabSize": 4, "editor.tokenColorCustomizations": { "comments": "#16662B" }, "editor.wordWrap": "wordWrapColumn", "editor.wordWrapColumn": 108, "editor.wrappingIndent": "same", "subtleBrackets.disableNative": false, "subtleBrackets.style": { "borderWidth": "2px", "borderColor": "#528BFF" }, "terminal.integrated.cursorBlinking": true, "terminal.integrated.cursorStyle": "line", "terminal.integrated.cursorWidth": 2, "terminal.integrated.defaultLocation": "editor", "terminal.integrated.fontFamily": "tic-80 font", "terminal.integrated.fontSize": 12, "terminal.integrated.lineHeight": 1.75, "window.menuBarVisibility": "toggle", "window.titleBarStyle": "native", "workbench.colorCustomizations": { "[CyberWave]": { "statusBar.noFolderBackground": "#FFB608", "statusBar.noFolderBorder": "#FFB608", "statusBar.noFolderForeground": "#000000", "statusBarItem.hoverBackground": "#ff0000" } }, "workbench.colorTheme": "CyberWave", "workbench.editor.showTabs": true, }
复现步骤:操作指引
- 输入
console.log()后按下回车键
- 可观察到分号成功插入。
- 输入
{后按下回车键
输入console.log()后按下回车键
- 可观察到格式化程序未补全缺失的分号。
- 输入
{后按下回车键
按下DELETE键删除右大括号与光标之间的换行
- 此时右大括号与光标应处于同一行。
按下DELETE键删除光标与右大括号之间的空白字符
输入console.log()后按下回车键 - 可观察到分号成功插入。
- 点击将光标定位到第7行右大括号的右侧,按下回车键
输入console.log()后按下回车键
- 可观察到分号成功插入。
- 再次点击将光标定位到第7行右大括号的右侧,按下回车键
输入console.log()后按下回车键
- 可观察到格式化程序再次未补全缺失的分号。
预期结果
console.log(); // Semicolon { console.log(); // Semicolon { console.log(); // Semicolon } } console.log(); // Semicolon console.log(); // Semicolon
实际结果
console.log(); { console.log() // No semicolon { console.log(); } } console.log() // No semicolon console.log();
内容的提问来源于stack exchange,提问作者Musixauce3000
相关产品推荐
相关产品推荐

