Me gustaría saber la mejor manera de personalizar el auto-formateo/auto-sangría en vim para Common Lisp.La mejor manera de personalizar el auto-formateo/sangría automática en vim para Common Lisp
Auto-formateo (Yo suelo hacer esto escribiendo '==' en el modo de comando por línea) funciona muy bien para el lenguaje base lisp en vim (por ejemplo, defmacro, defun, lambda, if, con-output-to -string), pero cada vez que se definen construcciones de lenguaje nuevo (por ejemplo, usando macros), encuentro que el formato para el nuevo constructo a menudo no es lo que me gustaría que fuera.
Por ejemplo, aquí es como vim formatos 'cuando (constructo Lisp estándar) y' ACuando (comúnmente usado versión anafórica 'cuando; no es parte de la norma Lisp)
(when 'this
(process 'this))
(awhen 'this
(process it))
me gustaría' ACuando a formato automático como 'cuando. ¿Alguna idea de cómo puedo hacer esto?
Editar: Gracias Gilligan y Tamas por la recomendación de Slimv. Como prueba, descargué MacVim (lo necesitaré trabajando con terminal vim, pero ese es un problema diferente) y delgado, conecté la descarga slimv en ~/.vim, lancé MacVim y cargué un archivo .lisp.
Luego inicié el servidor de lisp (hecho a través de una GUI con MacVim), que cargó mi ejecutable Lisp predeterminado y el archivo principal.
Y * dado que mi archivo principal ya está cargado con las extensiones de idioma que uso comúnmente (siendo uno de ellos), con el formato correcto al salir de la caja.
Me gusta mucho esta solución. En lugar de [1] tener que aprender a decir a vim que debe sangrar determinadas funciones de manera adecuada, y [2] escribir el código que hace esto explícitamente para cada extensión de idioma que defina, y [3] actualizar ese código cada vez que agregue un nuevo constructo de lenguaje. En cambio aprovecho slimv para hacer el formateo para mí. Y slimv puede 'aprender' nuevas extensiones de lenguaje, siempre que esas macros ya estén cargadas en el núcleo de lisp que usa la sesión del servidor. ¡Bastante resbaladizo!
He encontrado que esto funciona bien para una clase particular de extensiones de idioma. Usualmente se definen como una macro, usando la palabra clave de cuerpo &. Esto parece 'hacer lo correcto' la mayor parte del tiempo, pero hay macros que uso que todavía no se auto-formatean apropiadamente. Aunque diría que es más probable que esto sea un problema con la forma en que se escribe la macro (extensión de lenguaje no estándar) que con cualquier otra cosa.
Por lo tanto, esta solución funciona bien para mí en la mayoría de los casos, y no tuve que codificar (y mantener) nada. ¡Buena cosa!
Me alegra que te guste slimv.Si encuentra algún problema de sangrado, infórmelo a mí (soy el autor de slimv, puede encontrar mi dirección de correo electrónico en la documentación). –
La respuesta Slimv no es tan útil para las personas que buscan una mejor sangría de los formularios estándar en un dialecto Lisp que no es Common Lisp. – Kaz