2010-12-14 71 views
1

Ma société a récemment ajouté quelques nouvelles règles de style de code, et je me demandais s'il y avait un moyen facile via emacs de changer quelques choses avec un regex remplacer.Modifier le style des instructions If dans Emacs?

si les déclarations doivent maintenant se présenter comme suit:

if (expression) { 

où j'ai beaucoup qui ressemblent à ceci:

if(expression){ 

manque les espaces. Y at-il un moyen facile de résoudre ce problème?

+0

Pourquoi Emacs et pas, disons, sed? – Thomas

+2

Selon la quantité dont vous avez besoin t o nettoyez, vous pouvez essayer astyle (http://astyle.sourceforge.net/astyle.html) ou un autre outil de formatage, qui est spécifiquement conçu pour normaliser la mise en forme. –

Répondre

2

Vous pourriez être en mesure de remplacer regexp si expression est toujours sur une ligne, mais j'utiliser une fonction jetable juste pour être sûr:

(defun my-fix-style() 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (while (re-search-forward "\\_<if(" nil t) 
     (backward-char) 
     (insert " ") 
     (forward-sexp) 
     (unless (looking-at "[ \t\n]") 
     (insert " "))))) 
+0

Ce n'est pas infaillible mais ça marchera surtout. Vous pouvez également envisager d'utiliser 'query-replace-regexp'. –

+0

Oui, cela dépend du type de code qui a été écrit. Considérez: 'if (something_is_true()) {something_else(); } '(Cela est supposé être sur une seule ligne) Puisque les expressions rationnelles ne peuvent pas compter les parens, comment obtenez-vous celui-là? Certes, c'est pathologique, mais c'est pourquoi j'utiliserais une fonction. – scottfrazer

1

Juste mes deux cents, mais si je allait faire ça avec emacs, j'éviterais probablement les expressions régulières et je l'aborderais en deux parties. D'abord je ferais la recherche pour remplacer if( avec if ( en faisant un Meta-% "si (" "si (" Les marques de citation sont juste pour la délimitation, elles n'appartiennent pas dans le texte entré. requête, ou lui donner un "!" pour lui dire de faire tous les remplacements.Répéter le processus pour la fermeture ){ à ) {

Sur le dessus de ma tête, je m'attendrais à ce que la première substitution fonctionne sans problème. Le second aura aussi des combinaisons ") {" dans les boucles, mais si votre nouvelle norme exige un espace pour les instructions if, je m'attendrais à ce qu'il le fasse également pour les boucles, ce qui semble être une bonne chose.