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

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

我尝试创建一个新.lang文件,让 Gedit 识别Julia 编程语言我已经阅读教程, 这参考文件以及维基页面Gedit/新语言,并且我相信文件是正确的。但是,在将新julia.lang文件复制到后重新启动 gedit 时/usr/share/gtksourceview-3.0/language-specs/.jl 文件确实被识别,并且语法高亮菜单设置为 julia,但是并没有实际发生高亮。

我想我可能做错了什么,于是我尝试使用一个现有的语言文件,来获取类似的语言(矩阵),仅将 header 元数据改为:

<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>

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

我可能做错了什么?这家伙似乎遇到了同样的问题,但该帖子中从未透露他是如何解决的(如果他曾经解决过)。有什么想法吗?


更新:我的错误确实是没有更改上下文 ID,正如 @carandraug 在其回答中指出的那样。不过,我确实遇到了其他问题,我将在此指出,以防它们对任何人有帮助:

  1. def.lang我重用了Julia 单行注释中的“shell-like-comment”定义,但这让我犯了很多错误。结果发现,当参考上下文被使用时,id无法设置该属性。将 改为 后<context id="comment" ref="def:shell-like-comment" />错误<context ref="def:shell-like-comment" />消失。我认为参考文档(以及教程)应该提到这个警告。我编辑了维基页面来指出这一点。
  2. 在我弄清楚注释上下文的问题之前,我注释掉了它的定义,但后来我开始得到一个“样式‘def:string’未定义”错误。当我取消注释定义时,这个错误就消失了。我不确定是什么导致了它(考虑到确实<style id="string">在 中定义了a def.lang)。欢迎在评论中对此进行任何澄清 :-)

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

答案1

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

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

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

相关内容