Disons que j'ai un code elisp comme:
(+ 2 3▮(+ 3
4))
Existe-t-il un moyen de ré-indenter automatiquement le sexp après le curseur, lorsque j'ajoute ou supprime des symboles?
Donc, après avoir appuyé sur SPC 4 SPC
, j'obtiendrais automatiquement:
(+ 2 3 4 ▮(+ 3
4))
Je peux faire ce manuel en appelant mark-sexp
suivi de indent-region
. Y a-t-il de meilleures façons de procéder?
elisp
indentation
Maciej Goszczycki
la source
la source
electric-indent-mode
est bien meilleur que le mappage<return>
versnewline-and-indent
Réponses:
Au lieu de
mark-sexp
+indent-region
, vous pouvez appuyer surC-M-q
. Cela va appelerindent-pp-sexp
. Pas automatique, mais un peu mieux que d'avoir à invoquer deux commandes.Ou si vous utilisez
paredit-mode
, appuyez surM-q
. Cela réindentera toute la définition de fonction dans laquelle vous vous trouvez.la source
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
fonctionne bien surprenant.M-x sp-indent-defun
. Je lie cela àC-M-q
.Mode de retrait agressif
Depuis que certaines personnes l'ont demandé, j'ai transformé cette réponse en un package .
Si vous avez configuré Melpa, vous pouvez l'installer avec
Consultez le fichier Lisez - moi pour toutes les options, mais le moyen le plus simple de l'activer est:
L'ancienne réponse
Ce qui suit effectue l'indentation automatique uniquement sur les tampons elisp. Il a l'avantage de fonctionner également lorsque vous effacez ou tirez des trucs (au lieu de simplement taper). Il est également facile d'ajouter à d'autres modes.
Cette fonction indentera toute expression s dans laquelle le point se trouve actuellement. Vous pouvez le lier à une clé si vous le souhaitez, mais voyez d'abord ci-dessous.
Ce crochet fera en sorte que cette fonction sera exécutée après avoir tapé quoi que ce soit, mais uniquement dans les tampons elisp. Cela devrait garder tout toujours en retrait.
Essayez! Cela fonctionne remarquablement bien.
En outre, en suivant la suggestion de @ holocronweaver dans les commentaires, vous pouvez utiliser quelque chose comme ce qui suit pour les langages de type c:
la source
Je ne connais pas de solution préexistante, mais vous pouvez l'utiliser
post-self-insert-hook
pour y parvenir vous-même:Je m'inquiéterais cependant des problèmes de performances potentiels.
la source
Vous pouvez essayer le mode el-fly-indent , qui se comporte mieux que
aggressive-indent-mode
lorsque vous traitez avec Elisp.la source