2

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))

エラー メッセージはありません。CPerl モードの代わりに Perl モードをロードするだけです。

私が尋ねている理由は、cperl-set-style (emacs メニューから動作しますが、perl-mode にエイリアスされているときに CPerl モードへのフックとして追加した場合は機能しません) を使用していくつかの問題が発生したためです。 CPerl モードを直接読み込んでみたかった。

インデント スタイルを CPerl モードへのフックとして設定するために .emacs で使用しているステートメントは次のとおりです。

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

CPerl モードがロードされていない場合 (auto-mode-alist アプローチを使用している場合)、これは明らかに効果がなく、Perl モードにエイリアシングして CPerl モードをロードしている場合は正しく動作しません (GNU インデント スタイルを使用しているようです)。

4

2 に答える 2

2

(cperl-set-style "C++")の代わりに使用する必要があります(cperl-set-style 'C++)。変数cperl-style-alist(たとえばC-hv)を見ると、car'は記号ではなく文字列で構成されていることがわかります。エラーを発生させるのではなく、例が黙って失敗したのは残念なことのようです。ほとんどの場合、私は存在しないスタイルを選択しようとしたことを知りたいと思いますが、それが現状のままであるのにはおそらく正当な理由があります。

于 2012-03-03T20:11:06.837 に答える
2

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

Perl スクリプトは で始まり#!/usr/bin/perlますか?

次に、メジャーモードを指定するファイル変数がない場合、Emacs はファイルの内容が `#!' で始まるかどうかをチェックします。その場合、ファイルが実行可能なシェル コマンドとして機能し、ファイルの最初の行で指定されたインタープリターを実行できることを示します (ファイルの残りの部分は、インタープリターへの入力として使用されます)。したがって、Emacs はインタープリター名を使用してモードを選択しようとします。たとえば、`#!/usr/bin/perl' で始まるファイルは Perl モードで開かれます。変数 `interpreter-mode-alist' は、インタープリター プログラム名とメジャー モードの対応を指定します。

もちろん、デフォルトは perl-mode です。

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

したがって、リストに追加をもう一度使用するだけです...

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