将cperl模式与emacs中的Perl代码相关联



我正在尝试将CPerl模式与emacs中的Perl源文件相关联(在CentOS 6上为23.1.1)。

如果我在.emacs 中包含以下行

(defalias 'perl-mode 'cperl-mode)

则在打开Perl源文件时将加载CPerl模式。

然而,下面这行似乎ti应该起作用,结果却是加载Perl模式:

(add-to-list 'auto-mode-alist '("\.p[lm]$" . cperl-mode))

没有错误消息——它只是加载Perl模式而不是CPerl模式。

我问这个问题的原因是,我在使用cperl集合样式时遇到了一些问题(可以从emacs菜单中使用,但如果我将其作为挂钩添加到cperl模式中,当它被别名为perl模式时,就不会了),我想试着直接加载cperl模式。

我在.emacs中使用的将缩进样式设置为挂接CPerl模式的语句是

(eval-after-load "cperl-mode" 
    add-hook 'cperl-mode-hook (lambda() (cperl-set-style 'C++))))

如果CPerl模式没有加载(当我使用auto-mode alist方法时),并且当我通过将其别名为Perl模式来加载CPerl时没有做正确的事情(似乎使用GNU缩进样式),这显然没有影响。

您需要使用(cperl-set-style "C++")而不是(cperl-set-style 'C++)。如果您查看变量cperl-style-alist(例如,C-hv),则您将看到car由字符串而非符号组成。不幸的是,你的例子没有引起错误,而是悄无声息地失败了。大多数时候,我想知道我试图选择一种不存在的风格,但可能有一个很好的理由让它成为现在的样子。

M-:(info "(emacs) Choosing Modes")RET

您的perl脚本是从#!/usr/bin/perl开始的吗?

其次,如果没有指定主模式的文件变量,Emacs检查文件的内容是否以"#!"开头。如果是,那么指示该文件可以用作可执行的shell命令,该命令通过在文件的第一行(文件的其余部分用作解释器的输入)。因此Emacs尝试使用解释器名称来选择模式。对于例如,一个以`#!开头的文件/在perl中打开usr/bin/perl模式变量"解释器模式列表"指定解释器程序名称和主要模式之间的对应关系。

默认模式当然是perl模式:

ELISP> (assoc "perl" interpreter-mode-alist)
("perl" . perl-mode)

所以您只需再次使用"添加到列表"。。。

(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))

最新更新