Elispコードをフォーマット(プリティファイ)するコマンド


21

次のような関数があるとしましょう(elisp出力を印刷する場合によくあることです)。

(defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a))))

次のように、それを人間が書く何かに変えることができるコマンドが欲しいです。

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that (or this (and that those)))
      (format "%s" a))))

elispコードをフォーマットする方法は複数あり、人間によって異なる方法があることを理解しています。さらに、私はそれがやや主観的であることを理解しています。しかし、少なくともまともなコードになる一連のルールを考え出すのはかなり簡単なはずです。

私は実際に少し前にこれを自分で行うことを考えましたが、車輪を再発明する前に尋ねる方が良いと考えました。

注意してください、私はpp関数を知っていますが、そこまでは到達しません:

(defun my-example-function nil
  (let
      ((a
        (do-something))
       (b
        (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that
       (or this
           (and that those)))
      (format "%s" a))))

4
これは役立ちますか?Elispフォーマット
ルーク

フォーマットは必然的に主観的です。私はあなたが少し良いバージョンよりも良いことができるかどうかはわかりませんpp
shosti 14

@キングありがとう、それは確かに関連しています。
マラバルバ14

回答:


10

lispyがどのように再フォーマットしたかを以下に示します(M式の両端を押すことにより)。

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b (do-that (or this (and that those)))
                         (format "%s" a))))

これから指定した書式に移動するには、を押しqk C-m [ます。


(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
-grettke

8

他の人がコメントで示唆しているように、「フォーマット」は異なることを意味する場合があります。

以下のためにインデントはかなり一般的である、使用してみてくださいC-M-q(コマンドindent-pp-sexpあなたは再インデント(例えばしたいことを、トップレベルのS式の内部カーソルどこかでLispのモードでの)defunS式)。

いいえ、これは「自動」インデントではありませんが、使用する習慣になる可能性があります。;-)

インデント以外のものについては、手動で行うか、独自の「フォーマット」コマンドを実行するか、既存のコマンドを見つける必要があります。

EmacsマニュアルのノードMulti-line IndentおよびElispマニュアルのノードも参照してくださいMode-Specific Indent


3
おかげで、私はelispのインデントにとても満足しています。いつ改行するかを知っているものを探しています。:-)はい、私はそれが主観的であることを理解しています。:-(
マラバルバ14

M-qfill-paragraph)は、コンテキストによっては、Emacs-Lispモードでの改行に役立つ場合があります。しかし、あなたはおそらく、アライメントを探しているだけでなく...
ドリュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.