有没有办法告诉 VS Code 我的语言扩展名中的 firstLine 匹配应该否决任何文件扩展名?
Is there a way to tell VS Code that the firstLine match in my language extension should overrule any file extension?
我目前正在为 VS Code 开发语言扩展。我为其开发的语言通常带有自己的文件扩展名(我们称之为 .myext
)或简称为 .txt
(它只是一种脚本语言)。
我有 运行 的问题,我不确定如何在打开 .txt
文件时第一行匹配特定字符串时告诉 VS Code 使用我的扩展。
这就是我正在尝试的(摘自我的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
文件时激活我的扩展程序
- 打开
.txt
文件时没有激活我的扩展,这些文件 不 以通过 firstLine
指定的字符串开头
有办法吗?
如果您拥有最新版本的 VS Code,我之所以这样说是因为我拥有的可能在早期版本中受支持。在底部的工具栏上,您应该会看到为您打开的文件自动检测到的语言。例如,如果您有一个 .js 文件,它将自动配置 JavaScript。无论您文件的默认语言是什么,只需单击它,它就会带您进入 'Select Language Mode'。
从那里您可以选择。您可以 configure/customize 会发生什么 and/or 搜索扩展以实现语言模式。所以,我认为你会想做后者,特别是如果你正在创建自己的语言文件。
经过广泛搜索:目前无法做到这一点。
最近(2017 年中后期)发生了一项更改,允许匹配文件扩展名 和 文件第一行的语言扩展名优先于只包含文件扩展名的扩展名匹配两者之一。
但是,这不适用于 VS Code 的内置语言模式。匹配文件扩展名将使 VS Code always 为此类文件选择你的语言扩展名,如果没有其他扩展名可用于该语言,无论任何第一行规则可能有另外设置了。
我目前正在为 VS Code 开发语言扩展。我为其开发的语言通常带有自己的文件扩展名(我们称之为 .myext
)或简称为 .txt
(它只是一种脚本语言)。
我有 运行 的问题,我不确定如何在打开 .txt
文件时第一行匹配特定字符串时告诉 VS Code 使用我的扩展。
这就是我正在尝试的(摘自我的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
文件时激活我的扩展程序
有办法吗?
如果您拥有最新版本的 VS Code,我之所以这样说是因为我拥有的可能在早期版本中受支持。在底部的工具栏上,您应该会看到为您打开的文件自动检测到的语言。例如,如果您有一个 .js 文件,它将自动配置 JavaScript。无论您文件的默认语言是什么,只需单击它,它就会带您进入 'Select Language Mode'。
从那里您可以选择。您可以 configure/customize 会发生什么 and/or 搜索扩展以实现语言模式。所以,我认为你会想做后者,特别是如果你正在创建自己的语言文件。
经过广泛搜索:目前无法做到这一点。
最近(2017 年中后期)发生了一项更改,允许匹配文件扩展名 和 文件第一行的语言扩展名优先于只包含文件扩展名的扩展名匹配两者之一。
但是,这不适用于 VS Code 的内置语言模式。匹配文件扩展名将使 VS Code always 为此类文件选择你的语言扩展名,如果没有其他扩展名可用于该语言,无论任何第一行规则可能有另外设置了。