【问题标题】:associating cperl-mode with Perl code in emacs在 emacs 中将 cperl 模式与 Perl 代码相关联
【发布时间】:2012-03-02 20:42:28
【问题描述】:

我正在尝试将 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-set-style 时遇到了一些问题(在 emacs 菜单中工作,但如果我将它作为 CPerl 模式的钩子添加到 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 模式。

【问题讨论】:

  • 我假设您在add-hook 之前忘记了'(。 FWIW,您不需要在 eval-after-load 中包含 add-hook 语句,尽管它也不应该受到伤害。

标签: emacs cperl-mode


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    其次,如果没有指定主模式的文件变量,Emacs 检查文件的内容是否以 `#!' 开头。如果是这样,那 表示该文件可以作为一个可执行的 shell 命令,它 通过运行在文件的第一行命名的解释器来工作( 文件的其余部分用作解释器的输入)。所以, Emacs 尝试使用解释器名称来选择模式。为了 例如,以 `#!/usr/bin/perl' 开头的文件在 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))
    

    【讨论】:

    • 谢谢 - 成功了!我的脚本确实以正确的 shebang 行开头。
    • 很好听;在这种情况下,您应该“接受”答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2023-04-08
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多