我尝试创建一个新.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 在其回答中指出的那样。不过,我确实遇到了其他问题,我将在此指出,以防它们对任何人有帮助:
def.lang
我重用了Julia 单行注释中的“shell-like-comment”定义,但这让我犯了很多错误。结果发现,当参考上下文被使用时,id
无法设置该属性。将 改为 后<context id="comment" ref="def:shell-like-comment" />
错误<context ref="def:shell-like-comment" />
消失。我认为参考文档(以及教程)应该提到这个警告。我编辑了维基页面来指出这一点。- 在我弄清楚注释上下文的问题之前,我注释掉了它的定义,但后来我开始得到一个“样式‘def:string’未定义”错误。当我取消注释定义时,这个错误就消失了。我不确定是什么导致了它(考虑到确实
<style id="string">
在 中定义了adef.lang
)。欢迎在评论中对此进行任何澄清 :-)
对于为 gedit 开发新语言高亮定义的任何人的最后一个建议:不要忘记从命令行运行 gedit 并查看控制台输出!
答案1
我不知道为什么你的原始julia.lang
文件不起作用,因为你没有显示源代码,但是你所基于的文件matlab.lang
不起作用,因为里面没有你提到的<definitions>
相同的上下文。id
<language>
基本上,您说的是id
这种语言的 是julia
,但没有id
定义它的上下文。因此,请查找<context id="matlab"
(当前 HEAD 的第 149 行),并将其更改为julia
。
lang 文件通常被组织为一组针对所要突出显示的语言特征的单独上下文,然后最终将其分组为与id
语言相同的主块以及对其他上下文的引用。