VS Code开发TypeScript扩展时如何无需快捷键触发引号内自动补全
你遇到的问题是VSCode默认不会在字符串(引号内容)内主动触发补全,需要做两处调整即可实现引号内主动补全:
1. 开启字符串场景快速建议配置
在你的扩展package.json的contributes字段下添加如下配置,默认开启TypeScript文件字符串内的自动补全触发权限:
"contributes": { "configuration": { "title": "你的扩展配置", "properties": { "[typescript]": { "editor.quickSuggestions": { "other": true, "comments": false, "strings": true } } } } }
这个配置的作用是告知VSCode,在TypeScript文件的字符串内容中也要主动触发补全提示。
2. 注册补全提供者时指定触发字符
调用registerCompletionItemProvider时传入第四个参数,也就是你需要触发补全的字符数组。如果需要所有字母、数字输入都触发补全,可以参考如下写法调整你的代码:
function buildProvider(language : vscode.DocumentSelector, label : string, text : string | vscode.CompletionItemLabel){ // 生成a-z、A-Z、0-9作为触发字符,可按需增减自定义字符 const triggerChars = Array.from({length:26},(_,i)=>String.fromCharCode(97+i)) .concat(Array.from({length:26},(_,i)=>String.fromCharCode(65+i))) .concat(Array.from({length:10},(_,i)=>i.toString())); return vscode.languages.registerCompletionItemProvider('typescript', { provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) { const simpleCompletion = new vscode.CompletionItem('', vscode.CompletionItemKind.Text); simpleCompletion.label = label; simpleCompletion.insertText = text.toString(); return [ simpleCompletion, ]; } }, ...triggerChars); // 传入触发字符数组 }
如果有-、_这类特殊符号也需要触发补全,直接添加到triggerChars数组即可。
完成以上两处调整后,在TypeScript文件的引号内输入对应字符就会主动触发自定义补全,无需手动按Ctrl+Space唤起。
内容的提问来源于stack exchange,提问作者Dvir Meir Perkin
相关产品推荐
相关产品推荐

