如何在 Gedit 中为语法高亮添加新的语言定义?

wal*_*ous 5 gedit syntax-highlighting julia-lang

我试图创建一个新.lang文件来让 Gedit 识别Julia 编程语言。我已阅读教程参考文档和维基页面Gedit/NewLanguage,我相信该文件是正确的。但是,在将新julia.lang文件复制到 后重新启动 gedit 时/usr/share/gtksourceview-3.0/language-specs/确实可以识别 .jl 文件,并且语法突出显示菜单设置为 julia,但没有实际突出显示。

考虑到我可能做错了什么,我尝试使用现有的语言文件,用于类似的语言(Matlab),并且只将标头元数据更改为:

<language id="julia" _name="Julia" version="2.0" _section="Scientific">
  <metadata>
    <property name="mimetypes">text/x-julia;application/x-julia</property>
    <property name="globs">*.jl</property>
    <property name="line-comment-start">#</property>
  </metadata>
Run Code Online (Sandbox Code Playgroud)

其他所有内容都保持原样,我将文件另存为julia.lang. 尽管如此,当重新打开 gedit 时也会出现同样的问题。更重要的是,如果我选择从语法Matlab的入口突出菜单,格式是否正确做出(根据Matlab的规则),即使两者matlab.langjulia.lang具有完全相同的语法定义!

我可能做错了什么?这个人似乎有同样的问题,但在那条线索中从未透露过他是如何解决的(如果他曾经这样做过的话)。有任何想法吗?


更新:我的错误确实没有改变@carandraug 在他的回答中指出的上下文 id。但是,我确实有其他问题,我会在此处注明,以防它们对任何人有所帮助:

  1. 我在def.langJulia 的单行注释中重用了“shell-like-comment”定义,但这给我带来了很多错误。事实证明,当使用引用上下文时,id无法设置该属性。更改<context id="comment" ref="def:shell-like-comment" /><context ref="def:shell-like-comment" />使错误消失。我认为参考文档(以及教程)应该提到这个警告。我已经编辑了维基页面来指出这一点。
  2. 在我发现注释上下文的问题之前,我注释掉了它的定义,但随后我开始收到“样式 'def:string' 未定义”错误。当我取消注释定义时,此错误消失了。我不确定首先是什么原因造成的(考虑到确实 a<style id="string">是在 中定义的def.lang)。欢迎在评论中对此进行任何澄清:-)

给任何为 gedit 开发新语言高亮定义的人的最后建议:不要忘记从命令行运行 gedit 并查看控制台输出!

car*_*aug 2

我不知道为什么你的原始julia.lang文件不起作用,因为你没有显示源代码,但是你基于的文件matlab.lang将不起作用,因为里面没有与你提到的<definitions>相同的上下文。id<language>

基本上,您说id这种语言的 是julia,但是没有id定义它的上下文。因此找到<context id="matlab"当前 HEAD 的第 149 行),并将其更改为julia.

lang 文件通常被组织为一堆单独的上下文,用于突出显示的语言功能,然后最终将其分组到与id语言相同的主块中,并引用其他上下文。