リスト定数のインデント


7

EmacsのEmacs lispコードのインデントは、次の1つを除いて、本当に素晴らしいものです。

(defconst one-to-ten '(one two three
                           four five six seven
                           eight nine ten))

これは実際にこのブロックをインデントするための好ましい方法ですか?とは対照的に

(defconst one-to-ten '(one two three
                       four five six seven
                       eight nine ten))

alistsのデフォルトと比較すると、特に混乱します。

(defconst one-to-ten '((one . 1) (two . 2) (three . 3)
                       (four . 4) (five . 5) (six . 6) (seven . 7)
                       (eight . 8) (nine . 9) (ten . 10)))

この動作の理由はありますか?マクロのインデントが改善されるため、逆引用符付きのリストでも理解できるかもしれませんが、リストについてはどうでしょうか?


コーディング規約のマニュアルのセクションでは、ところで、この程度はかなり明示的です:Indent the file using the default indentation parameters.
クレマン

3
コーディング規約は、慣例により、我々は、デフォルトのインデントを尊重することを言うかもしれないが、それは理由を提供しない理由デフォルトのインデントはそれが何であるかです。コーディングリストには、定数リストがそのままインデントされる理由を示すものは何もありません。(「なぜ?」これは「第99に対応して、返信overtired親に似ているという理由だけで」。)
ドリュー

4
@EmacsUser:もちろんです。あなたのポイントは何ですか?「この振る舞いには理由があるのか​​?という質問はなぜこのインデントの慣習なのか?慣習は空から落ちません。そして時々それらは変更されます。なぜ唯一の答えはなぜですか?それが慣習だ」ということですが、答えはまったくありません。
2015

3
@EmacsUser:あなたの「ポイント」に反対する人はいません。質問は良いものです。このデフォルトを選択したのには十分な理由があるかもしれません。か否か。別のインデントには理由があるかもしれません。質問することは何の問題もありません。
2015

3
@Clément:FWIW、私は個人的にこれはバグであり、Elispモードのこの部分の周りに「最近」変更があったので、あなたはそうしたいかもしれませんM-x report-emacs-bug
ステファン

回答:


2

インデントを修正するために使用している設定は次のとおりです。

(setq lisp-indent-function 'common-lisp-indent-function)
(eval-after-load 'cl-indent
  `(progn
     (put 'cl-flet 'common-lisp-indent-function
          (get 'flet 'common-lisp-indent-function))
     (put 'cl-labels 'common-lisp-indent-function
          (get 'labels 'common-lisp-indent-function))
     (put 'if 'common-lisp-indent-function 2)))

Elispのインデントを一度に修正しようとしましたが、複雑すぎてあきらめました。しかし、上記の設定は何年もの間正常に機能しています。


それらputgetフォームの機能を簡単に説明していただけますか?cl-flet関数のインスタンスをfletとのcl-labelsインスタンスlabelsのみに置き換えますcommon-lisp-indent-functionか?もしそうなら、なぜそれが行われるのですか?また、3番目のputは何をしますか?putドキュメントを読みましたが、まだ意味がありませんでした。「シンボルのcommon-lisp-indent-functionプロパティの値ifを2に設定する」と解釈されますが、それは私には意味がありませんでした。
Kaushal Modi

これらの3つのケース'lisp-indent-function(つまり、デフォルトのケース)は実際にはよりも優れてい'common-lisp-indent-functionます。これらの設定により、インデントが1つからもう1つに引き継がれます。
abo-abo 2015

1
注:この質問に答えるのは最初の行のみ(setq lisp-indent-function 'common-lisp-indent-function)です(つまり)。残りは、定数リストに使用するインデントとは関係ありません。
ドリュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.