J'ai un fichier de code source qui a des onglets / espaces mixtes et je souhaite le convertir en un fichier dans lequel il a automatiquement remplacé tous les espaces d'indentation par des onglets pour une longueur d'espace de tabulation donnée (par exemple, onglet = 2 espaces). p>
Toute solution facile (avec des outils UNIX communs, MacOSX, BASH ou ZSH)? Quelques commandes SED Script ou Python ou donc? P>
merci, Albert P>
7 Réponses :
Vous pouvez utiliser une expression régulière pour remplacer n espaces par un caractère d'onglet. Par exemple en Python:
Ce n'est pas si facile. Ceci par exemple, cela ne remplacerait pas seulement les espaces utilisés pour l'indentation mais aussi partout ailleurs (et cela ne devrait pas le faire).
Deux choses, p>
sed -i code> Votre ami - sed -i xxx.txt 's / ^ [] \ \ {2 \} / \ t / g' code> li >
- Vous ne pouvez pas faire une expression régulière pour multiplier le remplacement de l'onglet par la longueur de l'espace. LI>
ol>
Compte tenu de mon awk-fu n'est pas fort (et je ne sais pas si cela peut faire ce que # 2 ne peut pas), je vais écrire un script php pour calculer les espaces et les remplacer par des onglets. P>
OK, cela ne remplacera au moins les espaces au début. Bien que cela ne le remplace pas plusieurs fois. Je vais probablement écrire un script python qui le fait pour moi.
sed -r 's/ {2}/\t/g' file
Ce n'est pas si facile. Ceci par exemple, cela ne remplacerait pas seulement les espaces utilisés pour l'indentation mais aussi partout ailleurs (et cela ne devrait pas le faire).
Selon le langage source, vous pouvez essayer Indent GNU . Il peut faire un grand nombre de choses relatifs à l'indentation du code source, bien que cela puisse être plus complexe que nécessaire.
Par exemple, si je donne le programme suivant à il le remplacera par: p> ou, si vous avez besoin de quelque chose de stupide simple, il y a le Indent -Di0
Développer / Nonpand Code> Commandes. P> P>
indent code> ne fonctionne pas (c'est python - difficile, je recherche également une solution qui fonctionne aussi dans les autres cas).
Développer CODE> /
NonPand CODE> est trop simple (comme la plupart des autres solutions données ici). :)
Peut-être le script reindent.py à svn.python.org/projects /python/trunk/tools/scripts/reindent. py donnera une base à ce dont vous avez besoin alors?
Hey, ce reindent.py semble surtout comme ce que je voulais. :) Eh bien, je n'ai pas regardé de manière grande là-dessus, je ne suis pas sûr que si ce n'est que Python - seulement (ce qui m'aurait aidé maintenant mais n'aurait pas été la solution générale que je cherchais). Codé moi-même maintenant ...
Voici une solution possible en Python:
OK, meilleure solution que les autres mais cela ne fonctionnera pas s'il y a déjà des espaces mixtes / des onglets. Sth. Comme "\ t \ t" code> devrait devenir
"\ t" * 3 code>.
Est-ce que cela fonctionne si vous remplacez la regex avec "^ (| \ t) +" code>? Je pense que je ne comprends pas exactement les exigences. EDIT: B> C'est Deux espaces i> dans la nouvelle regex, le marquillage de code en ligne effondra malheureusement les espaces.
OK, aucune des solutions données m'a satisfait, alors je l'ai codée moi-même. :) p>
voir ici: p>
Ceci convertira des espaces principaux (même entrecoupés avec des onglets) en onglets. Spécifiez le nombre d'espaces à convertir en définissant la variable. Les espaces errants seront effondrés à rien. Les espaces et les onglets qui apparaissent après n'importe quel caractère autre que l'espace ou l'onglet ne seront pas touchés. Exemple: p> [tab][tab][tab][tab][tab]TEXT[space][space][space]
Totalement illisible mais ressemble à ce que je cherchais. :) BTW., Ne devrait-il pas être ... [onglet] [espace] texte code> dans la sortie? Au moins c'est ce que je veux.
Je retiens tous les espaces errants. Que voudriez-vous (pour tstop = 2 code>)
[onglet] [espace] [onglet] ... texte code> à ressembler? Qu'en est-il de
[onglet] [espace] [espace] texte code>?
[t] [s] [t] texte code> devrait devenir
[t] [t] text code>.
[t] [S] [S] texte code> devrait devenir
[t] [t] text code>.
[t] [S] texte code> devrait rester identique.
Puis-je demander qui a mis le vole proche ici? Et pourquoi? Et pourquoi sans commentaire?
Désolé pour le vote rapproché, je pensais d'abord que cela appartiendrait à SuperUserSer.com, mais j'ai vu qu'il ne pouvait pas être fait sans programmation.