我正在尝试将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模式。
答案 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
由字符串而不是符号组成。你的例子无声地失败而不是引发错误,这似乎很不幸。大多数时候我都想知道我试图选择一种不存在的风格,但可能有一个很好的理由让它成为现实。