Ассоциирование cperl-режима с кодом Perl в emacs
Я пытаюсь связать режим CPerl с исходными файлами Perl в emacs (23.1.1 в CentOS 6).
Если я включу следующую строку в мой.emacs
(defalias 'perl-mode 'cperl-mode)
тогда режим CPerl будет загружен при открытии исходного файла Perl.
Однако следующая строка, которая, кажется, должна работать, приводит к загрузке режима Perl:
(add-to-list 'auto-mode-alist '("\\.p[lm]$" . cperl-mode))
Там нет сообщения об ошибке - он просто загружает режим Perl вместо режима CPerl.
Причина, по которой я спрашиваю, состоит в том, что у меня возникли некоторые проблемы с использованием стиля cperl-set (работает из меню 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), и не делает правильных действий (кажется, использует стиль отступа GNU), когда я загружаю режим CPerl путем наложения его на режим Perl.
2 ответа
Вам нужно использовать (cperl-set-style "C++")
вместо (cperl-set-style 'C++)
, Если вы посмотрите на переменную cperl-style-alist
(например, с Chv), то вы увидите, что car
состоит из строк, а не символов. Кажется прискорбным, что ваш пример провалился молча, а не выдал ошибку. Большую часть времени я хотел бы знать, что я пытался выбрать несуществующий стиль, но, вероятно, есть веская причина, чтобы он был таким, какой он есть.
M-: (info "(emacs) Choosing Modes")
RET
Ваши Perl-скрипты начинаются с #!/usr/bin/perl
?
Во-вторых, если нет файловой переменной, задающей основной режим, Emacs проверяет, начинается ли содержимое файла с `#!'. Если это так, это означает, что файл может служить в качестве исполняемой команды оболочки, которая работает, выполняя интерпретатор, названный в первой строке файла (остальная часть файла используется в качестве входных данных для интерпретатора). Поэтому Emacs пытается использовать имя интерпретатора для выбора режима. Например, файл, начинающийся с `#!/ Usr/bin/perl', открывается в режиме Perl. Переменная интерпретатор-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))