VSCode 中的动态代码段评估
Dynamic snippet evaluation in VSCode
片段是否可以在 Visual Studio 代码中插入动态计算完成或片段?
我想要一个用于插入各种格式的日期和时间字符串的片段。例如,如果您键入 date
,ISO 格式的当前日期将自动展开。
Sublime Text 中有一个工具可以通过 EventListener
class 中的 on_query_completions
方法在 python API 中执行此操作。那里的实施将非常简单:
def on_query_completions(self, view, prefix, locations):
if prefix == 'date':
val = datetime.now().strftime('%Y-%m-%d')
return [(prefix, prefix, val)] if val else []
我已阅读 User Defined Snippets 上的文档,但似乎只能插入带有制表位和用户填写的变量的预定义文本。
如果片段 API 公开的功能无法做到这一点,我是否可以通过较低级别的 plugin/extension API 实现类似的功能?
我确实知道有一个名为 Insert Date and Time 的现有扩展,但这通过命令托盘而不是动态扩展工作。
绝对不可能在片段中执行脚本或类似的东西。
您可以为 Visual Studio 代码编写扩展。扩展必须实现 CompletionItemProvider
。
它的 provideCompletionItems
方法会 return 一个 CompletionItems
的列表。它们的 filterText
属性将设置为建议框中显示的文本(例如 "date" 或 "time"),它们的 insertText
属性将设置为动态计算的值。
最后,您需要使用 registerCompletionItemProvider
.
注册完成提供程序
您绝对应该在开始之前了解如何创建扩展:https://code.visualstudio.com/docs/extensions/example-hello-world
不过,无需扩展也可以实现简单的日期时间内容:
"⌚ Date Time SNIPPET": {
"prefix": "datetime",
"body": [
"${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}",
]
}
问题是关于动态片段的。这是使用 CompletionItemProvider
:
的示例
const datetimeProvider = vscode.languages.registerCompletionItemProvider(
{
scheme: 'file',
// language: 'typescript',
},
{
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position) {
const completionItem = new vscode.CompletionItem('datetime ⌚', vscode.CompletionItemKind.Snippet);
completionItem.insertText = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0];
return [completionItem];
}
},
// ''// trigger character
);
片段是否可以在 Visual Studio 代码中插入动态计算完成或片段?
我想要一个用于插入各种格式的日期和时间字符串的片段。例如,如果您键入 date
,ISO 格式的当前日期将自动展开。
Sublime Text 中有一个工具可以通过 EventListener
class 中的 on_query_completions
方法在 python API 中执行此操作。那里的实施将非常简单:
def on_query_completions(self, view, prefix, locations):
if prefix == 'date':
val = datetime.now().strftime('%Y-%m-%d')
return [(prefix, prefix, val)] if val else []
我已阅读 User Defined Snippets 上的文档,但似乎只能插入带有制表位和用户填写的变量的预定义文本。
如果片段 API 公开的功能无法做到这一点,我是否可以通过较低级别的 plugin/extension API 实现类似的功能?
我确实知道有一个名为 Insert Date and Time 的现有扩展,但这通过命令托盘而不是动态扩展工作。
绝对不可能在片段中执行脚本或类似的东西。
您可以为 Visual Studio 代码编写扩展。扩展必须实现 CompletionItemProvider
。
它的 provideCompletionItems
方法会 return 一个 CompletionItems
的列表。它们的 filterText
属性将设置为建议框中显示的文本(例如 "date" 或 "time"),它们的 insertText
属性将设置为动态计算的值。
最后,您需要使用 registerCompletionItemProvider
.
您绝对应该在开始之前了解如何创建扩展:https://code.visualstudio.com/docs/extensions/example-hello-world
不过,无需扩展也可以实现简单的日期时间内容:
"⌚ Date Time SNIPPET": {
"prefix": "datetime",
"body": [
"${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}",
]
}
问题是关于动态片段的。这是使用 CompletionItemProvider
:
const datetimeProvider = vscode.languages.registerCompletionItemProvider(
{
scheme: 'file',
// language: 'typescript',
},
{
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position) {
const completionItem = new vscode.CompletionItem('datetime ⌚', vscode.CompletionItemKind.Snippet);
completionItem.insertText = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0];
return [completionItem];
}
},
// ''// trigger character
);