有没有办法告诉 VS Code,我的语言扩展名中的第一行匹配应该推翻任何文件扩展名?



我目前正在为VS Code开发语言扩展。我正在开发它的语言通常带有自己的文件扩展名(我们称之为.myext(或简单地.txt(它只是一种脚本语言(。

我遇到了一个问题,即当打开文件时第一行与特定字符串匹配时,我不确定如何告诉 VS Code 使用我的扩展.txt

这就是我正在尝试的(摘自我的package.json(:

"contributes": {
"languages": [
{
"id": "mylang",
"aliases": [
"mylang"
],
"extensions": [
".myext"
],
"firstLine": "^MyLang.*",
"configuration": "./language-configuration.json"
}
]
}

当我打开以MyLang开头的.txt文件时,这不起作用。但是,如果我打开一个未知(例如,file.foobar1234(或根本没有扩展名的文件,它确实有效。

当我现在更改配置以包含.txt文件时,它将为我打开的任何.txt文件激活我的扩展名:

"contributes": {
"languages": [
{
"id": "mylang",
"aliases": [
"mylang"
],
"extensions": [
".myext",
".txt"
],
"firstLine": "^MyLang.*",
"configuration": "./language-configuration.json"
}
]
}

但是,我不想要这个,我想在打开普通.txt文件时保留默认plain text设置。

简而言之,我想要实现的目标:

  • 在我的自定义文件扩展名.myext上激活我的扩展名(这已经可以正常工作了(
  • 打开以通过firstLine指定的字符串开头.txt的文件时激活我的扩展
  • 打开不以
  • 通过firstLine指定的字符串开头的.txt文件时,不要激活我的扩展

有没有办法做到这一点?

经过一些广泛的搜索:这目前是不可能的。

最近有一个变化(2017 年中后期(,允许与文件扩展名文件第一行匹配的语言扩展名优先于仅匹配两者之一的扩展名。

但是,这不适用于 VS Code 的内置语言模式。匹配文件扩展名将使 VS Code始终为此类文件选择语言扩展名(如果没有其他扩展名可用于该语言(,而不管可能已设置的任何第一行规则。

有关其他信息,请参阅此处和此处。

如果你有最新版本的 VS Code,我这么说是因为这是我所拥有的,早期版本可能支持它。在底部工具栏上,您应该会看到已打开的文件自动检测的语言。 例如,如果你有一个.js文件,它将自动配置JavaScript。 无论您的文件默认使用哪种语言,只需单击它,它就会将您带入"选择语言模式"。

从那里您将有选择。您可以配置/自定义发生的情况和/或搜索扩展以满足语言模式。 所以,我认为你想做后者,特别是如果你正在创建自己的语言文件。

最新更新