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

@ King 감사합니다, 그것은 확실히 관련이 있습니다.
Malabarba

답변:


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

다른 사람들이 의견에서 제안한 것처럼 "포맷"은 다른 것을 의미 할 수 있습니다.

매우 일반적인 들여 쓰기의 경우 , 다시 들여 쓰기하려는 최상위 sexp 내부의 커서 (예 : sexp) 와 함께 (Lisp 모드의 C-M-q명령) indent-pp-sexp을 사용해보십시오 defun.

아니요, "자동"들여 쓰기는 아니지만 사용하는 습관이 될 수 있습니다. ;-)

들여 쓰기 이외의 작업은 수동으로 수행하거나 직접 "포맷"명령을 실행하거나 기존 명령을 찾아야합니다.

Emacs 매뉴얼, 노드 다중 라인 들여 쓰기 및 Elisp 매뉴얼 노드도 참조하십시오 Mode-Specific Indent.


3
고맙게도, 나는 들여 쓰기에 매우 만족합니다. 줄을 끊을 때를 알고있는 것을 찾고 있습니다. :-) 그리고 나는 주관적인 것으로 이해합니다. :-(
Malabarba

M-q( fill-paragraph)는 상황에 따라 Emacs-Lisp 모드에서 줄 바꿈에 유용 할 수 있습니다. 하지만 당신도 아마 정렬을 찾고 있습니다 ...
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.