我是一个 perl 程序员和一个新的 emacs 用户。我在 Windows 下,使用 cperl-mode 来编辑 perl。Emacs 版本是 24.2.1。这是带有一些示例代码的屏幕截图:
(来源:breqwas.net)
- 明显的错误:它在 (a => "b" ) 样式列表中突出显示数组、哈希和未引用的文字值
- 另一个错误:由于非默认引号符号,它将正则表达式中的第一个单词作为数组高亮显示
- 不是错误,但看起来很奇怪:它在使用数组和散列时随时突出显示(即使在注释中,呵呵),但标量仅在声明时才会突出显示
- 不是错误,但看起来很奇怪:与函数相同的故事:声明时突出显示,而不是调用时
- 不是错误,但看起来很奇怪:为什么“打印”、“说”和“系统”有不同的颜色?
我可以继续前进,但我希望这能很好地解释“破碎”这个词。
然后我学会了神奇的 Cu Cx = 组合键,它显示光标下文本的文本属性等,希望能做出更好的自己的着色方案。在这一点上,它开始变得更没有意义了。
“打印”具有cperl-nonoverridable-face。“死”有font-lock-keyword-face。同时,两者都是函数,可以(并且经常)被覆盖。“系统”有font-lock-type-face。为什么?函数声明有font-lock-function-name-face - 这没关系,但“use”的参数也是如此。为什么?函数调用和标量根本没有 face 属性,无法突出显示。为什么?等等,等等。再一次,我可以继续前进。
有没有办法解决这一切?是否有一些配置可以让我将词汇单元重新映射到其他字体,或者其他方式来使语法突出显示不那么疯狂?
为了避免“perl 不可解析”的说法,这里是我要迁移的编辑器的屏幕截图,代码完全相同:http: //breqwas.net/dropbox/perlsyn_pn.png。看起来更合理。
更新:到目前为止(在这里提出这个问题后 3 周)我还没有找到治愈方法。我认识的所有使用 emacs 的 perl 程序员都忽略了这些问题。似乎没有更好的用于 emacs 的 perl 荧光笔。阅读 cperl-mode 文档提供了一些解释(现在各种元素的面孔选择似乎不那么疯狂了),但没有提供任何答案。我给 cperl-mode 维护者写了一封电子邮件,提出了这些问题,并进行了一些挖掘,但没有得到回复。
是的,你没看错:似乎 emacs 社区在 perl 出现的 25 年里无法做出好的 perl 语法高亮。这是一个悲伤的故事。