Vorrei conoscere il modo migliore per personalizzare la formattazione automatica/indentazione automatica in vim per Common Lisp.Il modo migliore per personalizzare la formattazione automatica/indentazione automatica in vim per Common Lisp
La formattazione automatica (di solito lo faccio digitando '==' in modalità comando per riga) funziona molto bene per il linguaggio di base lisp in vim (ad esempio defmacro, defun, lambda, if, with-output-to -stringa), ma ogni volta che vengono definiti nuovi costrutti di linguaggio (ad esempio, utilizzando macro), trovo che la formattazione per il nuovo costrutto spesso non è ciò che mi piacerebbe fosse.
Ad esempio, ecco come vim formati 'quando (lisp costrutto standard) e' AQuando (comunemente usato la versione anaforica di 'quando, non fa parte dello standard Lisp)
(when 'this
(process 'this))
(awhen 'this
(process it))
vorrei' AQuando a auto-formato come 'quando. Qualche idea su come posso farlo?
Modifica: Grazie Gilligan e Tamas per la raccomandazione Slimv. Come test, ho scaricato MacVim (avrò bisogno di questo con il terminale vim, ma questo è un problema diverso) e slimv, rsynched il download slimv in ~/.vim, lanciato MacVim e caricato un file .lisp.
Ho quindi avviato il server Lisp (eseguito tramite una GUI con MacVim), che ha caricato il file eseguibile e il file core Lisp predefinito.
E * poiché il mio file principale è già caricato con le estensioni del linguaggio che uso comunemente (anche se sono uno di loro), subito formattato correttamente appena estratto dalla confezione.
Mi piace molto questa soluzione. Invece di [1] devo imparare come dire a vim di indentare particolari funzioni in modo corretto, e [2] scrivere il codice che fa questo esplicitamente per ogni estensione di linguaggio che definisco e [3] aggiornando quel codice ogni volta che aggiungo un nuovo costruzione del linguaggio. Invece faccio leva su slimv per fare la formattazione per me. E slimv può "apprendere" nuove estensioni della lingua, purché tali macro siano già caricate nel core lisp utilizzato dalla sessione del server. Piuttosto lucido!
Ho trovato che questo funziona bene per una particolare classe di estensioni del linguaggio. Di solito quelli definiti come macro, usando la parola chiave body &. Questo sembra "fare la cosa giusta" il più delle volte, ma ci sono macro che uso che non vengono ancora correttamente formattate automaticamente. Anche se direi che questo è più probabile che sia un problema con il modo in cui la macro è scritta (estensione del linguaggio non standard) di qualsiasi altra cosa.
Quindi, questa soluzione funziona bene per me nella maggior parte dei casi, e non ho dovuto codificare (e mantenere) nulla. Grandi cose!
Sono contento che ti piaccia slimv.Se trovi problemi di indentazione, segnalacelo (sono l'autore di slimv, puoi trovare il mio indirizzo email nella documentazione). –
La risposta Slimv non è così utile per le persone che cercano un rientro migliore dei moduli standard in un dialetto Lisp che non sia Common Lisp. – Kaz