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

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

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

   text/x-julia;application/x-julia *.jl #  

其他所有内容都保持原样,我将文件保存为julia.lang 。 不过,当重新打开gedit时会出现同样的问题。 更重要的是,如果我从语法高亮菜单中选择Matlab条目,则格式化正确(根据Matlab规则),即使matlab.langjulia.lang都具有完全相同的语法定义!

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


更新 :我的错误确实没有改变@carandraug在他的回答中指出的上下文ID。 但是,我确实有其他问题,如果他们对任何人有帮助,我会在这里注明:

  1. 我重复使用def.lang的“shell-like-comment”定义来def.lang Julia的单行注释,但这给我带来了很多错误。 事实certificate,当使用引用上下文时,不能设置id属性。 从更改为使错误消失。 我认为参考文档(以及教程)应该提到这个警告。 我编辑了维基页面以指出这一点。
  2. 在我用注释上下文解决问题之前,我注释掉了它的定义,但后来我开始得到一个“样式’def:string’未定义”错误。 当我取消注释定义时,此错误消失了。 我不确定是什么原因引起的(考虑到确实在def.lang中定义了 )。 有关这方面的任何澄清都欢迎评论:-)

对开发新语言的任何人的最终建议都要强调gedit的定义:不要忘记从命令行运行gedit并查看控制台输出!

我不知道为什么你原来的julia.lang文件没有工作,因为你没有显示源代码,但是你基于matlab.lang将无法工作,因为没有你提到的相同id上下文

基本上,你说这种语言的idjulia ,但是没有定义id上下文。 因此,找到 ( 当前HEAD的第149行 ),并将其更改为julia

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