perl - Emacs 中 perl 的语法高亮显示已损坏,有修复吗?

标签 perl emacs cperl-mode

我是一个 perl 程序员和一个新的 emacs 用户。我在 Windows 下,使用 cperl-mode 编辑 perl。 Emacs 版本是 24.2.1。这是带有一些示例代码的屏幕截图:

(来源:breqwas.net)

  • 明显的错误:它在注释中突出显示 ( a => "b") 样式列表中的数组、散列和未引用的文字值
  • 另一个错误:由于非默认引号
  • ,它会将正则表达式中的第一个单词高亮显示为数组
  • 不是错误,但看起来很奇怪:它会在使用时随时突出显示数组和散列(即使在注释中,呵呵),但只有在声明
  • 时才会突出显示标量
  • 不是错误,但看起来很奇怪:与函数相同的故事:在声明时突出显示,而不是在调用时突出显示
  • 不是错误,但看起来很奇怪:为什么“打印”、“说”和“系统”有不同的颜色?

  • 我可以继续前进,但我希望这能很好地解释“ splinter ”这个词。

    然后我学会了神奇的 C-u C-x = 组合键,它显示了光标下文本的文本属性,希望能做出更好的自己的配色方案。在这一点上,它开始变得更没有意义了。

    “打印”具有 cperl-nonoverridable-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 语法高亮。这是一个悲伤的故事。

    最佳答案

    您可能想尝试 perl-mode而不是 cperl-mode .如果您发现其中缺少的功能,我们也许可以从 cperl-mode 移植它们。没有太多的麻烦。 perl-mode的突出显示不如 cperl-mode 花哨's 但它确实解决了您指出的一些问题。

    至于“在声明时突出显示,而不是在调用时突出显示”,这是因为 Emacs 通常以这种方式突出显示。我发现突出显示变量和函数用途的好处为零。我在 perl-mode 中保留了变量用途的突出显示主要是因为它以前就在那里,我不想与心怀不满的用户打交道。此外,在 Perl 的情况下,可能更容易突出显示变量声明并使用与 perl-mode 相同的方法。而cperl-mode必须做额外的工作来区分这两种情况。

    关于perl - Emacs 中 perl 的语法高亮显示已损坏,有修复吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138932/

    相关文章:

    perl - 如何强制 FastCGI 将表单数据编码为 UTF-8,因为 CGI.pm 有选项?

    perl - 如何使用 perltidy 对文件进行就地更新?

    emacs - 将 C-m 与 RET 解除绑定(bind)

    encoding - Cygwin Emacs、Windows Everything 和 ^M

    perl - 如何在 Emacs 中调整 cperl 模式缩进以匹配 Moose 示例?

    javascript - 可以从网页转储 AJAX 内容吗?

    perl - 如何在不重复二级 key 的情况下打印出复杂的哈希值?

    python - emacs elpy/jedi 代码完成 : popup window not working properly

    perl - 是否可以在 emacs 中突出显示内插的 perl 变量?

    perl - 如何防止大括号在 Emacs cperl 模式下移动?