提问人:Lex Podgorny 提问时间:10/26/2023 最后编辑:Lex Podgorny 更新时间:11/19/2023 访问量:21
如何在一个语法文件中组合两个语法高亮显示以获得崇高的文本?
How to combine two syntax highlightings in one syntax file for sublime text?
问:
我希望能够对像 Vue.js 这样的文件进行语法突出显示,其中 javascript 和 css 出现在同一个文件中,如下所示:
// Some JavaScript code
function hello() {
console.log("Hello");
}
====
.selector {
color: red;
}
----
let foo = 'bar'
====
.foo {
bar : 'baz';
}
----
我假设,有一种方法可以在 Sublime YAML 文件中的两个语法突出显示之间有条件地切换。我尝试了各种方法......
%YAML 1.2
---
name: Test
file_extensions: [test]
scope: source.test
extends: Packages/User/JavaScript.sublime-syntax
version: 2
contexts:
main:
- include: 'scope:source.js'
- match: '===='
push: 'css-block'
css-block:
- match: '----'
- include: 'scope:source.css'
pop: true
# embed: scope:source.css
# escape: '----'
经过数小时的阅读文档和与 gpt 聊天,我不是更聪明的:(有人知道秘方吗?
答:
1赞
Keith Hall
10/28/2023
#1
您当前的方法存在一些问题。
- 在上下文中,您将覆盖所有内容,这意味着不会评估文件上下文中的默认规则。这可以通过以下方法进行修复,以确保您的规则排在第一位。这将防止需要 .
main
JavaScript.sublime-syntax
main
meta_prepend: true
- include: 'scope:source.js'
- JavaScript 语法定义的上下文只是检查 shebang,然后切换到上下文。反过来,这基本上只包括上下文。这是您要放置匹配模式的位置。
main
script
statements
====
- 与其推送包含 CSS 语法的上下文,不如使用 /,否则,如果 CSS 语法在内部推送到另一个上下文,它将不再从上下文中评估匹配模式。
css-block
embed
escape
css-block
- 对意志没有影响。 仅适用于指令。
pop: true
include
pop
match
%YAML 1.2
---
name: Test JS
file_extensions: [test]
scope: source.test
extends: Packages/JavaScript/JavaScript.sublime-syntax
version: 2
contexts:
statements:
- meta_prepend: true
- match: '===='
embed: scope:source.css
escape: '----'
评论