代码之家  ›  专栏  ›  技术社区  ›  HappyFace

lisp典型缩进约定背后的规则是什么?

  •  1
  • HappyFace  · 技术社区  · 7 年前

    mods注意:请注意,这个问题根本不是品味的问题。我想了解有关我在Spacemacs的elisp默认缩进规则中遇到的缩进约定的具体信息。

    为什么格式化程序会这样缩进此代码:

    (defun lispy--maybe-safe-delete-region (beg end)
      "Delete the region from BEG to END.
    If `lispy-safe-delete' is non-nil, exclude unmatched delimiters."
      (if lispy-safe-delete
          (let ((safe-regions (lispy--find-safe-regions beg end)))
            (dolist (safe-region safe-regions)
              (delete-region (car safe-region) (cdr safe-region)))
            (test))
        (delete-region beg end)
        (test)))
    

    而不是这样:

    (defun lispy--maybe-safe-delete-region (beg end)
      "Delete the region from BEG to END.
    If `lispy-safe-delete' is non-nil, exclude unmatched delimiters."
      (if lispy-safe-delete
          (let ((safe-regions (lispy--find-safe-regions beg end)))
            (dolist (safe-region safe-regions)
              (delete-region (car safe-region) (cdr safe-region)))
            (test))
          (delete-region beg end)
          (test)))
    

    如您所见,默认格式没有缩进 if 同一级别的sexp。我不理解它的运作规则,因为 let sexp在同一级别缩进。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Rainer Joswig mmmmmm    7 年前

    因为 IF Emacs Lisp运算符允许 然后 表格和 倍数 其他的 表格。这个 其他的 表单缩进与 然后 表格的可读性。

    ELISP> (if (> 10 20)
               (print 'foo)
             (princ 'bar)
             (princ 'baz)
             nil)
    barbaz
    nil