有没有办法在Visual Studio Code中扩展支持的语言/语法?我想添加自定义语言语法,但我无法找到有关如何提供语言服务的任何信息.
任何人都可以指出现有语言实现的任何参考或甚至示例吗?
我正在尝试为日志文件创建一个简单的着色,现在可以在Code中包含自定义语言(我在0.9.2上).我创建了一个简单的.tmLanguage文件,用于着色字母'q',仅用于启动,但是没有成功.
我的新语言log与文件扩展名正确关联,我也可以从Code内部手动选择它,但不会出现着色.我觉得这与我将模式联系起来的"范围"有关,但我不确定.是否有可供选择的有效范围列表?最初我以为我会使用一些通用的东西,例如"评论"来获得一些颜色,但它似乎不起作用.
这是我的.tmLanguage文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scopeName</key>
<string>text.log</string>
<key>fileTypes</key>
<array>
<string>log</string>
</array>
<key>name</key>
<string>Log file</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>q</string>
<key>name</key>
<string>comment</string>
</dict>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我可能在这里误解了一些东西,所以非常感谢任何帮助:-)
VS Code 1.15 添加了对 TextMate 语法规则的支持。我想用这些规则突出显示 JavaScript 中的一些变量:self,me。我怎样才能做到这一点?
我使用 Textmate 作为我的代码编辑器,我希望能够从中运行 Julia。我在保存 .jl 文件并将其发送到终端(通过 Textmate 中的 Julia 包)没有问题,但我想知道是否可以使会话具有交互性,例如,在会话时存储变量正在运行(例如,我可以将代码逐行发送给 Julia,或者使用类似 Rdaemon 的东西)。
我正在尝试在Visual Studio Code中创建扩展,以便为自定义语言启用语法突出显示。我在这里找到@Wosi提供的有用建议:在Visual Studio Code中创建自定义语言。基于此,我尝试进行以下测试。我创建下一个子文件夹%USERPROFILE%\.vscode\extensions用package.json在根定义如下(从上面的例子):
{
"name": "mylang",
"version": "0.0.1",
"engines": {
"vscode": ">=0.9.0-pre.1"
},
"publisher": "me",
"contributes": {
"languages": [{
"id": "mylang",
"aliases": ["MyLang", "mylang"],
"extensions": [".mylang",".myl"]
}],
"grammars": [{
"language": "mylang",
"scopeName": "source.mylang",
"path": "./syntaxes/mylang.tmLanguage"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我在其下创建了一个语法子文件夹,并mylang.tmLanguage根据@wozi给出的示例在其中包含一个文件:如何为VS Code创建简单的自定义语言着色有一些小的修改只是为了使命名与上述JSON一致文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scopeName</key>
<string>source.mylang</string>
<key>fileTypes</key>
<array>
<string>mylang</string>
<string>myl</string>
</array>
<key>name</key>
<string>mylang file</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(?i:(hint|info|information))\b</string> …Run Code Online (Sandbox Code Playgroud) json syntax-highlighting visual-studio-code tmlanguage vscode-extensions
额外的语法被注入到作用域中markup.fenced_code.block.markdown
不过L:markup.fenced_code.block.markdown是用的。在这种情况下意味着什么L:?它是范围选择器的特殊语法吗?我在https://manual.macromates.com/en/scope_selectors.html中找不到任何相关信息
情境
我有描述一系列要执行的任务的JSON文件,其中每个任务可以引用JSON文件中的其他任务和对象。
{
"tasks": [
{ "id": "first", "action": "doSomething()", "result": {} },
{ "id": "second", "action": "doSomething(${id:first.result})", "result": {} },
]
}
Run Code Online (Sandbox Code Playgroud)
我想同时具有JSON模式验证和自定义语言文本效果,例如关键字着色,甚至在JSON的字符串中都支持“转到定义”。
我可以做什么
我可以创建一个扩展名,该扩展名为文件扩展名“ * .foo.json”指定JSON模式。如果vscode将文件识别为JSON文件,则可以在编辑器中进行模式验证和代码完成。
我还可以在扩展名中为“ * .foo.json”文件创建新的“ foo”语言,该文件在JSON字符串中具有自定义关键字颜色。我通过创建从JSON.tmLanguage.json复制的TextMate(* .tmLanguage.json)文件,然后修改“ stringcontent”定义来完成此操作。
问题
问题是模式验证和提示仅在我在状态栏中选择了“ JSON”作为文件类型时才起作用,而自定义文本着色仅在我在状态栏中选择了“ foo”作为文件类型时才起作用。
有什么办法可以同时拥有两者?我可以以某种方式在vscode中扩展JSON语言处理吗?
前言如下。可以在以下位置找到说明此问题的演示项目: https ://github.com/kirksl/so60384141
我可以在本机 VSCode 语言中引用注入语法
指定这个(package.json)
"grammars":
[
{
"scopeName": "source.js.mylang",
"path": "./syntaxes/mylang-js.tmLanguage.json",
"injectTo": ["source.js"]
}
]
Run Code Online (Sandbox Code Playgroud)
和这个(./syntaxes/mylang-js.tmLanguage.json)
{
"scopeName": "source.js.mylang",
"injectionSelector": "L:source",
"patterns": [
{
"include": "#todo-keyword"
}
],
"repository": {
"todo-keyword": {
"match": "TODO",
"name": "keyword.todo"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看到这个(.js 文件,原生 JS)
到目前为止,一切都很好。
但是,我似乎无法在下面详述的自定义语言中引用相同的注入语法。带三引号的围栏代码块应该利用它。
现在更新这个(package.json)
"languages": [
{
"id": "mylang",
"aliases": ["Mylang", "mylang"],
"extensions": [".mylang"],
"configuration": "./language-configuration.json"
}
],
"grammars":
[
{
"language": "mylang",
"scopeName": "source.mylang",
"path": "./syntaxes/mylang.tmLanguage.json",
"embeddedLanguages": {
"meta.embedded.block.javascript": "javascript"
}
},
{
"scopeName": "source.js.mylang", …Run Code Online (Sandbox Code Playgroud) 我正在开发 vscode 的语言扩展。我定义了一个 tmLanguage 文件,一切运行良好。在悬停功能中,使用vscode.MarkdownString.appendCodeblock()markdown 被正确解释,并且我的自定义语言的语法突出显示可以开箱即用,通过执行以下操作:
const content = new MarkdownString("", true)
content.appendMarkdown("## Examples: \n")
content.appendCodeblock(examples, "lmps")
Run Code Online (Sandbox Code Playgroud)
其中examples包含我的自定义语言的一些示例代码,"lmps"是我的语言标识符。(图像悬停示例)
我想知道是否有办法在网络视图中实现同样的事情。我成功地在 webview 中显示了content,将 markdownString 编译成 html:
async function set_doc_panel_content(panel: DocPanel | undefined, md_content: vscode.MarkdownString) {
const html: string = await vscode.commands.executeCommand('markdown.api.render', md_content.value) as string;
panel!.webview.html = html;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好,但是通过这种方式,Markdown 不知道我的自定义语言,并且不做任何语法突出显示。(示例图像 Webview)现在,我了解到向 Markdown 扩展添加语言支持可以通过在激活函数中返回一个对象来贡献一个 markdown-it 插件来实现。
export function activate(context: vscode.ExtensionContext) {
...
return {
extendMarkdownIt(md: any) {
return md.use(require('markdown-it-emoji'));
}
} …Run Code Online (Sandbox Code Playgroud) markdown visual-studio-code tmlanguage vscode-extensions markdown-it
我想[ ]在 VS Code 的 Markdown 文件中选择语法突出显示。
我可以使用[ ]以下目标regex:(?<=\s)\]|\[(?=\s)但是,[ ]当它是标题的一部分时,不会匹配。
作为一个最小的例子,package.json我有以下内容:
"contributes": {
"grammars": [
{
"scopeName": "markdown.todo",
"path": "./syntaxes/todo.markdown.json",
"injectTo": ["text.html.markdown"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后,在todo.markdown.json我有:
{
"scopeName": "markdown.todo",
"injectionSelector": "L:text.html.markdown",
"patterns": [
{ "include": "#item-todo" }
],
"repository": {
"item-todo": {
"name": "item.todo",
"match": "(?<=\\s)\\]|\\[(?=\\s)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在 VS Code 中settings.json我使用以下方法应用颜色:
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "item.todo",
"settings": {
"foreground": "#FF0000" …Run Code Online (Sandbox Code Playgroud) tmlanguage ×10
textmate ×3
markdown ×2
javascript ×1
json ×1
julia ×1
markdown-it ×1
textmate2 ×1