有没有一种方法可以为VS Code 创建上下文摘要命题?我正在尝试将自定义代码段添加到css.json文件中,如果我在特定标记中,则要考虑在内。说明,当我输入bckgd为div属性时,我想获取此代码。
div { background: color position size repeat origin clip attachment image; } 但是如果光标不在标签内,我不希望它向我显示此摘要。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在VS Code中,创建上下文感知的代码片段(或称为"智能提示")主要依赖于snippets
配置中的context部分来定义触发条件。不过,直接在css.json
这样的用户或工作区设置文件中实现动态根据光标位置(比如是否位于HTML标签内)来显示代码片段的功能并不直接支持。
但是,你可以通过编写VS Code扩展来实现更复杂的逻辑,包括检查当前上下文是否符合你的特定需求(例如,光标是否位于一个div
标签内)。以下是一个概念性的指导步骤,帮助你开始这个过程:
首先,确保你安装了Node.js,因为这是开发VS Code扩展的基本要求。然后,安装Yeoman和VS Code Extension Generator:
npm install -g yo generator-code
使用Yeoman生成一个新的VS Code扩展项目:
yo code
按照提示操作,选择新建一个“New Snippet Contribution”类型的扩展,并给它起个名字,比如DivCssSnippets
。
在生成的项目中,找到extension.ts
文件,这是你的扩展的主要入口点。你需要在这里添加逻辑来检测编辑器的上下文,并决定何时提供代码片段建议。
你可以利用VS Code的API,特别是vscode.window.activeTextEditor
和DocumentSelector
来判断当前文档类型及光标位置。一个简化的示例可能如下所示:
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
const provider = new DivCssSnippetProvider();
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider('css', provider, ...['div'])
);
}
class DivCssSnippetProvider implements vscode.CompletionItemProvider {
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): vscode.ProviderResult<vscode.CompletionItem[] | vscode.CompletionList> {
// 这里可以添加逻辑来检查光标前是否有div标签
// 例如,使用正则表达式匹配上文,或者更复杂的方法
const lineUntilPosition = document.getText(new vscode.Range(position.lineStart, position));
if (lineUntilPosition.includes('<div') && !lineUntilPosition.includes('>')) {
return [
new vscode.CompletionItem('bckgd', vscode.CompletionItemKind.Snippet)
.withInsertText('background: color position size repeat origin clip attachment image;')
.withDetail('CSS background shorthand')
];
}
return [];
}
}
请注意,上述代码仅作为示例,实际应用中需要更精确的逻辑来判断光标是否位于div
标签内,这可能涉及到解析HTML或CSS文档结构,相对复杂。
在完成编码后,可以在VS Code的开发模式下测试你的扩展。如果一切正常,你可以将它打包并发布到VS Code市场,让其他用户也能使用。
虽然这种方法比直接修改css.json
要复杂得多,但它提供了高度定制化和上下文感知的能力,能够满足你所描述的需求。