Visual studio code VSCode中的动态代码段求值

Visual studio code VSCode中的动态代码段求值,visual-studio-code,vscode-extensions,vscode-snippets,Visual Studio Code,Vscode Extensions,Vscode Snippets,片段是否可以在Visual Studio代码中插入动态计算的完成或片段 我想插入各种格式的日期和时间字符串的片段。例如,如果键入日期,ISO格式的当前日期将自动展开 Sublime Text中有一个工具,可以通过EventListener类中的方法在python API中实现这一点。在那里,实施将非常简单: def on_query_completions(self、view、前缀、位置): 如果前缀==“日期”: val=datetime.now().strftime(“%Y-%m-%d”)

片段是否可以在Visual Studio代码中插入动态计算的完成或片段

我想插入各种格式的日期和时间字符串的片段。例如,如果键入日期,ISO格式的当前日期将自动展开

Sublime Text中有一个工具,可以通过
EventListener
类中的方法在python API中实现这一点。在那里,实施将非常简单:

def on_query_completions(self、view、前缀、位置):
如果前缀==“日期”:
val=datetime.now().strftime(“%Y-%m-%d”)
如果val else[]则返回[(前缀,前缀,val)]
我已经阅读了上的文档,但似乎只能插入带有制表位和用户填写的变量的预定义文本

如果snippetapi公开的功能无法实现这一点,那么我是否能够通过较低级别的插件/扩展API实现类似的功能


我确实意识到有一个名为的现有扩展,但它通过命令托盘而不是动态扩展来工作。

在代码段中执行脚本或类似内容绝对是不可能的

您可以为VisualStudio代码编写扩展。该扩展必须实现一个

它的
provideCompletionItems
方法将返回一个列表。它们的
filterText
属性将设置为建议框中显示的文本(例如“日期”或“时间”),它们的
insertText
属性将设置为动态计算的值

最后,您需要使用注册表CompletionImprovider注册完成提供程序


在开始之前,您绝对应该看看如何创建扩展名:

不过,不使用扩展名也可以实现简单的日期时间功能:

"⌚ Date Time SNIPPET": {
    "prefix": "datetime",
    "body": [
        "${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}",
    ]
}
问题是关于动态代码段。下面是一个使用
CompletionTemprovider
的示例:

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
);

谢谢,这为我指明了正确的方向。对于这个用例,使用
CompletionItem
s来实现并不像ST那样简单,但它确实提供了更多的灵活性。@chris scott,我正在寻找如何做同样的事情(出于同样的原因-不同格式的时间戳)。既然它听起来像是在工作,您是否愿意分享您的扩展或将其放在VS代码市场上?:)@Dullroar,是的,我正计划去。我还没有在开发模式之外测试它,这就是为什么我还没有发布它的原因,但我会上传到github,以便您可以查看。期待着它。这仍然是事实吗,或者这方面有任何更新吗?谷歌搜索了一下,但没有发现任何东西:(你可以使用扩展名并定义键盘快捷键