2009-06-09 10 views
8

Dites si je donne les résultats suivants:comment aligner des arguments à des fonctions dans emacs?

func(arg1, arg2, arg3...) 
func(longargarg1, longerarg2, arg3,...) 
... 

Comment aligner les arguments pour que ce soit comme suit?

func(arg1  , arg2  , arg3...) 
func(longargarg1, longerarg2, arg3,...) 
... 

[je peux utiliser M-x align-regex pour aligner le premier argument, mais je ne peux pas cuisiner avec un regex approprié pour aligner le reste des arguments. point de bonus si la réponse prend également les soucis de l'affaire lorsque certains arguments sont des chaînes par des virgules dans les]

+1

points bonus! Doux! – Cheeso

Répondre

16

Sélectionnez la région, puis:.

C-u M-x align-regexp RET ,\(\s-*\) RET RET RET y 

Le regexp dit d'aligner des virgules avec des espaces les suivants. La valeur par défaut de 1 pour le groupe de parent à modifier signifie insérer des espaces où \(\s-*\) est, la valeur par défaut de 1 pour les espaces à ajuster signifie avoir un espace après la plus longue expansion, et vous voulez qu'il soit répété sur toute la ligne.

+0

Cool! Je ne sais même pas qu'il existe une version plus complexe d'align-regexp. Note à moi-même: lire des documentations ... Mais existe-t-il une meilleure version de l'expression rationnelle qui ignore les virgules si elles sont dans une paire de guillemets doubles? (emacs ne semble pas avoir de type regexps anticipé/-behind) – polyglot

+0

Vous pouvez écrire votre propre routine d'alignement qui utilise la table de syntaxe pour déterminer les virgules "count" dans la regex. Je ne suis pas sûr de savoir comment faire cela "facilement", cependant. – jrockway