将cperl-mode与emacs中的Perl代码相关联

时间:2012-03-02 20:42:28

标签: emacs cperl-mode

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

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

(defalias 'perl-mode 'cperl-mode)

然后在打开Perl源文件时加载CPerl模式。

但是,以下行似乎应该可以工作,导致加载Perl模式:

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

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

我问的原因是我在使用cperl-set-style时遇到了一些问题(从emacs菜单开始工作但是如果我把它作为挂钩添加到CPerl模式时它被别名为perl-mode )我想尝试直接加载CPerl模式。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

您的perl脚本是以#!/usr/bin/perl开头吗?

  

其次,如果没有指定主模式的文件变量,则为Emacs   检查文件的内容是否以“#!”开头。如果是这样,那   表示该文件可以作为可执行shell命令使用   通过运行在文件的第一行上命名的解释器来工作(   该文件的其余部分用作解释器的输入)。因此,   Emacs尝试使用解释器名称来选择模式。对于   例如,在Perl中打开以`#!/ usr / bin / perl'开头的文件   模式。变量`interpreter-mode-alist'指定了   口译员程序名称与主要模式之间的对应关系。

默认情况下是perl-mode:

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

所以你只需再次使用add-to-list ......

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

答案 1 :(得分:2)

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