我是一名perl程序员和一名新的emacs用户。我在Windows下,使用cperl-mode编辑perl。 Emacs版本是24.2.1。这是一个带有一些示例代码的屏幕截图:
http://breqwas.net/dropbox/perlsyn_emacs.png
我可以坚持下去,但我希望能很好地解释“破碎”这个词。
然后我学会了神奇的C-u C-x =键组合,其中显示了光标下文本的文本属性,希望能够制作出更好的自己的着色方案。在这一点上,它开始变得更没意义了。
“print”有 cperl-nonoverridable-face 。 “die”有 font-lock-keyword-face 。同时,两者都是功能,可以(通常是)被覆盖。 “system”有 font-lock-type-face 。为什么?函数声明有 font-lock-function-name-face - 这没关系,但“use”的参数也是如此。为什么?函数调用和标量根本没有face属性,无法突出显示。为什么?等等,再次,我可以继续。
有没有办法解决这一切?是否有一些配置,我可以将词法单位重新映射到其他字体 - 或其他一些方法,使语法高亮不那么疯狂?
为了避免“perl is notarsarsible”的讨论,这里是我正在迁移的编辑器的屏幕截图,使用完全相同的代码:http://breqwas.net/dropbox/perlsyn_pn.png。看起来更合理。
更新:到目前为止(在此问这个问题后3周),我找不到治疗方法。所有使用emacs的perl程序员我都知道忽略了这些问题。似乎不存在更好的用于emacs的perl荧光笔。阅读cperl-mode docs提供了一些解释(现在各种元素的面孔选择似乎不那么疯狂),但没有提供任何答案。我写了一封给cperl-mode maintainer的电子邮件,里面有这些问题,还有一些挖掘,但没有回复。
是的,你做对了:似乎emacs社区无法在25年内制作一个好的perl语法,perl就是这样。那是一个悲伤的故事。
答案 0 :(得分:3)
您可能想要perl-mode
而不是cperl-mode
。如果您发现其中缺少功能,我们可以从cperl-mode
移植它们而不会有太多麻烦。 perl-mode
突出显示的内容不如cperl-mode
那么华丽,但它确实解决了您指出的一些问题。
至于#34;在声明时突出显示,而不是在被叫时#34;这是因为Emacs通常以这种方式突出显示。我发现突出变量和函数用途没有任何好处。我在perl-mode
中一直强调变量用法,主要是因为它之前存在,我并不想处理心怀不满的用户。此外,在Perl的情况下,可能更容易突出显示变量声明并使用与perl-mode
相同的用法,而cperl-mode
必须做额外的工作来区分这两种情况。
答案 1 :(得分:0)
使用Emacs cperl-mode强调要注意的另一种语法与用于注释掉代码块的POD注释有关。这是一个演示截图:
非常容易错过使用POD指令的注释掉的代码,而不使用空行填充,因为我的“不推荐”#39;上面的例子。在Emacs中查看时,它只是作为评论而不会引起注意,特别是如果评论的块很大并跨越多个屏幕页面,那么' = cut'即使在视线中也没有。
值得注意的是, vim 的Perl模式正确地突出了POD而不需要每个POD规范的空白行填充,但我会提醒vim用户避免依赖该功能并使用空白行填充和' =开始评论... =结束评论'如上所示的指令和as recommended。
如果Perl有一个更简单的多行注释语法,那就太好了。* / * ... * /'而不是受到滥用的POD机制。也许我们有一天会在Perl 6中得到这个?
Emacs(对于任何语言)中的多行注释的另一种方式是通过' string-rectangle'内置:C-x r t然后键入'#'。要取消注释块,可以手动执行,也可以编写一个简单的宏。