问题标签 [tmlanguage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - 用于捕获函数的 tmLanguage 正则表达式,它可以包含许多函数
我的 vscode 扩展 tmLanguage 不是为 JavaScript 明确构建的,但我将使用它作为示例,因为它演示了最佳用例。举个例子:
我的目标是捕获第 1 行作为开始,第 15 行作为结束标记,第 2-14 行作为函数体标记。并分别对#17-22 行重复。请注意,我的函数起始行不是特定于空格的,并且可能会根据用户的判断在新行上。
我尝试了许多不同的方法,使用\G
锚或其他方法,下面的语法示例是我最接近的。但是,它在第一个找到的右大括号之后停止}
,或者在我上面的示例中的第 6 行之后。我希望它在第 15 行结束捕获
我的示例是使用 yaml,但是任何您喜欢使用的与 vscode 一起使用的东西都可以
编辑根据 Gama11 的反馈,我能够让它工作。本质上,该过程中最重要的部分是递归。所以基本上我没有改变任何东西,只是添加了一个递归正则表达式来查找{}
对。这是工作示例:
visual-studio-code - 如何在 vscode 扩展中使用多个 tmLanguage 文件
我正在为自己在vscode中创建一个语言扩展。因为它会关联不同的文件类型,所以我打算为特定的规则制作不同的 tmlanguge 文件。据此,我可以扩展来实现这一点。scopeName
所以我在我的./package.json
文件中创建了这样的东西:
./syntaxes/tst.tmLanguage.json
然后我在两者中创建基本规则,.type1
并.type2
已应用于我的语法。
之后我也做./syntaxes/type1.tmLanguage.json
了这样的事情:
中的任何规则都不适用.type1
。
我希望图片中的两个文件都能识别test
和type1
. 我检查了 vscode 预装的 cpp 语言扩展。他们还使用 scopeNamesource.c
和source.c.platform
。我想这是为了类似的目的?
我忽略了什么吗?谢谢您的帮助。
visual-studio-code - tmLanguage 语法中的 `injections` 和 `injectionSelector` 有什么区别?
injectionScope
在为 Visual Studio Code 编写注入语法时,我已经熟悉该属性。
但是,我也遇到了一些使用injections
属性的语法,例如这里:https ://github.com/pushqrdx/vscode-inline-html/blob/master/syntaxes/es6.inline.html.json ,我找不到任何关于它的文档。它是干什么用的?
visual-studio-code - 在哪里可以找到适用于 Visual Studio Code 中 C#/.NET 核心的 textMateRules 的官方完整范围列表?
到目前为止,我在https://github.com/Microsoft/vscode/issues/6056上查看了一个请求,该请求已根据要着色的主题元素的完整列表关闭?. 这反过来发送到https://code.visualstudio.com/docs/getstarted/themes和https://code.visualstudio.com/docs/getstarted/theme-color-reference但没有关于范围的信息。
我能找到的最接近的灵感来源是https://github.com/Microsoft/vscode/blob/master/extensions/theme-defaults/themes/hc_black.json但它远不是微软发布的官方完整、系统的列表/树C# 特定范围。
如果重要的话,它从需要通过范围(即本地与外部范围)或访问修饰符(即私有保护等)对变量进行颜色区分开始。
visual-studio-code - 如何为 VSCode 的输出面板添加自定义着色
我已经为 VSCode安装了输出着色器扩展。但是,我找不到任何关于它的说明。我所知道的是扩展创建“text/log”、“text/x-log”、“text/x-code-output”、“x-code-output”mime-types..这将允许我指定自定义影响输出面板的特定范围的颜色。我所做的就是安装输出着色器扩展。
我可以在我的 settings.json 文件中放入什么来覆盖 VSCode 输出面板的文本颜色(在下面的屏幕截图中)?我不想更改我当前的“黑色”面板背景颜色,只更改此面板中的文本颜色而不影响编辑器窗格中的文本。我可以更改下面的深红色,但不能不更改所有语言的字符串范围的颜色。
json - 尝试在 vscode 扩展语法中为 if then 语句构建正则表达式
长期潜伏者,第一次海报。
我正在尝试为 TeraTerm (ttl) 编写一个 vscode 语法,其中有相当多的学习经验,并且已经碰到了几堵墙。我遇到的最大问题是为 ttl 的 if/then/endif 编写正则表达式。通常我很享受为自己解决问题的满足感,但每次我把事情搞砸时,我最终都会把事情锁起来。if then 的 ttl 格式为:
单个 if/then 很容易在 tmlanguage 中解决,但是将一个正则表达式放在一起用于嵌套 if/thens 会导致多个 ctrl-alt-deletes。我已经非常擅长单行中的先行/后行,但是多行一直是皇家的痛苦。这有点像我一直在做的事情:
不知何故,我需要获取 if/then 及其匹配的 endif,而不是意外抓取属于的 endif,然后执行不同的 if。我最大的问题是我真的不知道如何处理正则表达式中的多行,除了包括(?m)
.
我不确定在语法中是否有其他问题。我想要一种方法来查看是否已经在上面的脚本中定义了一个变量,这样如果我试图在错误的地方使用字符串/整数,或者它没有被定义,我可以适当地标记。但是,我不知道有任何方法可以在正则表达式中将一个捕获组与另一个捕获组进行比较。如果有人知道一个很好的例子或文档,我会非常高兴。我为此使用的主要文档是 MS 的vscode stuff和macromates。
任何指针/帮助/链接将不胜感激。这几乎是阻碍我的最后一个正则表达式,因为其他一切都是单行事务。
visual-studio-code - 正则表达式匹配 = object 和 (
我正在开发一个 VS Code 扩展来支持一种新语言,对于一些语法高亮,我想匹配 和 之间的任何= object
文本(
。
我尝试了以下正则表达式:
但是当我将它添加到我的语法文件中时,它会破坏所有其他有效的规则,一切都会再次变白。
该正则表达式(?<==\s*object).*?(?=\()/g
可在https://regexr.com/上使用以下文本:
VS Code 没有给我任何异常或提示为什么这个 Regex 不起作用,有没有人知道为什么 Regex 在 VS Code 中不起作用?
visual-studio-code - 定义一个“总是获胜”的 VSCode 方案语法规则
我想在 markdown 中添加一些额外的语法高亮。
我定义了一个注入语法:
结果:
我希望看到我对这两个例子的规则,但它只适用于第一个:
所以看起来我的范围没有占用,即使正则表达式匹配(单独测试)。
我查了一下,Markdownmeta.paragraph.markdown
用这个begin
规则定义:
这个while
规则:
我目前的理论是,这种未while
封闭的状态阻碍了我的规则。
问题:
- 开放规则是否会阻止任何其他匹配的发生?
- 我如何告诉我的 vscode/textmate 语法我希望它一直“赢”,即使在不同的范围内?
我努力了:
- 使用开始/结束规则而不是
match
(无变化) - 将语言定义为的子集,
meta.paragraph.markdown
而不是text.html.markdown
:("injectionSelector": "L:meta.paragraph.markdown"
不按预期添加嵌套范围)
visual-studio-code - 如何在自定义 VSCode 语言中引用注入的语法
前言如下。可以在以下位置找到说明此问题的演示项目: https ://github.com/kirksl/so60384141
我可以在原生 VSCode 语言中引用注入的语法
指定这个(package.json)
还有这个(./syntaxes/mylang-js.tmLanguage.json)
我看到了这个(.js 文件,本机 JS)
到目前为止,一切都很好。
但是,我似乎无法在下面详述的自定义语言中引用相同的注入语法。带有三引号的围栏代码块应该使用它。
现在更新这个(package.json)
并另外指定这个(./syntaxes/mylang-js.tmLanguage.json)
我看到了这个(.mylang 文件,JS 突出显示,TODO 未突出显示)
最后只是显示一些管道可以启用我正在寻找的突出显示
如果我切换"include": "source.js"
到"include": "source.js.mylang"
我看到了这个(.mylang 文件,JS 未突出显示,TODO 突出显示)
regex - VSCode:更改自定义TextMate语法中规则的优先级?
在我制作的一个简单的待办事项列表语言语法中,一些范围在它们的正则表达式规则中重叠,所以某些范围根本没有被识别。我想优先考虑这些范围,以便在另一个范围内识别它们。
目前它看起来像这样:
范围是:
XXam/pm
紧急(红色;以or开头的行*
)- 等待(黄色;以 开头的行
`
) - url(紫色;以 开头的单词
http
) - 标签(蓝色;以 开头的单词
@
)
我希望标记和 URL 即使在紧急或等待行中也可以着色,但目前范围和令牌检查器显示第 2 行和第 3 行全部是紧急范围,第 4 行全部是等待范围,即使这些行中应该有标签和 URL。
我试过颠倒 .tmLanguage 文件中定义的顺序,但这没有任何区别。以下是这些定义:
那么,即使在紧急和等待范围内,标签和 url 范围也需要进行哪些更改才能被识别?
更新:一个不完美的解决方法
我可以通过使用以下正则表达式使紧急和等待范围(红色和黄色)在在线遇到标记或 url 时结束来防止范围重叠:
此解决方法的限制是标签和 URL 必须位于行尾,否则正常文本会出现在不应出现的位置:
理想情况下,我仍然希望在紧急和等待范围内识别标签和 URL,以便即使在行中间的标签和/或 URL 之后,紧急或等待范围也可以继续。