development – Cerrando todos los paréntesis pendientes

Pregunta:

Al escribir códigos lisp, a veces estoy en una expresión anidada y todo lo que quiero es insertar todos los paréntesis de cierre que faltan. En este momento solo los estoy insertando hasta que obtengo un par no coincidente, pero no es muy eficiente.
¿Hay algún comando para insertar todos los paréntesis que faltan?

Para su información, estoy usando smartparens para insertar automáticamente los parens coincidentes. Aún así, a veces solo necesito hacer esto.

Respuesta:

Aquí hay una función que cierra todos los paréntesis sin cerrar y otros pares coincidentes, como los corchetes. Se basa en el análisis sexp de Emacs. Solo admite pares coincidentes de un solo carácter, por lo que algo como {- se cerrará con } , no -} . Para Lisp, eso no importa.

(defun close-all-parentheses ()
  (interactive "*")
  (let ((closing nil))
    (save-excursion
      (while (condition-case nil
         (progn
           (backward-up-list)
           (let ((syntax (syntax-after (point))))
             (cl-case (car syntax)
               ((4) (setq closing (cons (cdr syntax) closing)))
               ((7 8) (setq closing (cons (char-after (point)) closing)))))
           t)
           ((scan-error) nil))))
    (apply #'insert (nreverse closing))))

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım