2

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

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

(defalias 'perl-mode 'cperl-mode)

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

然而,下面这行,看起来 ti 应该可以工作,却导致 Perl 模式被加载:

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

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

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

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

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

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

4

2 回答 2

2

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

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

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

当然默认是 perl 模式:

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

因此,您只需再次使用 add-to-list ...

(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
于 2012-03-02T23:06:44.870 回答
2

您需要使用(cperl-set-style "C++")而不是(cperl-set-style 'C++). 如果您查看变量cperl-style-alist(例如使用C-hv),那么您会看到car' 由字符串而不是符号组成。不幸的是,您的示例默默地失败了,而不是引发错误。大多数时候我想知道我试图选择一种不存在的风格,但可能有充分的理由让它成为这样。

于 2012-03-03T20:11:06.837 回答