Comment supprimer automatiquement les espaces de fin dans Eclipse?

422

La question comporte deux parties, dont l'une a déjà la réponse.

  1. Comment supprimer automatiquement les espaces de fin du fichier en cours de modification ? -> Réponse: utilisez le plugin AnyEdit , qui peut être configuré pour le faire sur n'importe quelle sauvegarde du fichier.
  2. Comment supprimer automatiquement les espaces de fin des lignes que j'ai modifiées ? -> Je ne sais pas et j'apprécierais toute aide.
Jan Żankowski
la source
97
Je serais heureux si je pouvais simplement convaincre Eclipse d'arrêter d'ajouter des espaces de fin que je n'ai pas saisis.
divegeek
5
Vous n'avez pas besoin d'un plugin. Utilisez simplement C ++ -> Editor -> Save Actions. Général -> Éditeurs -> Éditeurs de texte -> Afficher les espaces blancs (cliquez dessus pour les paramètres détaillés) est également très pratique.
Trass3r
3
L'action d'enregistrement par défaut ne supprime pas les espaces vides de fin dans les commentaires Java Doc. En outre, il est limité par le fait qu'il ne fonctionne que sur les fichiers Java. Nous avons un système de révision de code qui marque tous les espaces blancs à la fin comme des erreurs. AnyEdit est inestimable pour prendre soin des espaces vides de fin pour tous les types de fichiers. En outre, il peut être utile de déterminer les restrictions de votre entreprise pour les logiciels tiers. Le plugin AnyEdit a une licence EPL ( opensource.org/licenses/eclipse-1.0.php ) [d'ici: andrei.gmxhome.de/anyedit/index.html]
Ashutosh Jindal
1
Je n'ai pas pu comprendre pourquoi les espaces blancs à la fin des lignes sont soudainement supprimés, jusqu'à ce que je voie votre question et découvre que c'était à cause d'AnyEditPlugin. Merci!
Tzafrir

Réponses:

142
  1. Suppression des espaces de l'ensemble du fichier en cours de modification :

Preferences-> Java-> Editors-> Save Actions-> cocher Perform the selected actions on save-> cocher Additional actions-> cliquer Configure..-> aller dans l' Code organizingonglet -> cocher Remove trailing whitespace-> sélectionner All lines.

  1. Supprimer les espaces uniquement des lignes que j'ai modifiées :

Preferences-> Java-> Editor-> Save Actions-> cocher " Perform the selected actions on save-> cocher Format source code-> sélectionner Format edited lines.

Notez qu'il n'est pas nécessaire de cliquer Configure the formatter settings on the Formatter page- tous les styles de code incluent automatiquement la suppression des espaces de fin. Au moins, je n'ai pas pu trouver de paramètre pour cela dans la configuration de Formatter, et cela a fonctionné par défaut pour les conventions Java intégrées, les styles Eclipse, Eclipse 2.1, ainsi que GoogleStyle .

Lorsque vous utilisez cette configuration, vous devez évidemment désactiver également la solution de la partie 1 de la question.

Eclipse version checked: 4.5.2, 4.11
Dan Berindei
la source
Comment définir le format? Dois-je utiliser le lien Formateur ou le bouton Configurer?
Vijay Kotari
Cette option apparaît également dans PDT pour PHP, sous Enregistrer les actions.
thaddeusmt le
1
@VijayKotari La réponse a été modifiée - pas besoin de définir un format.
Jan Żankowski
350

Je suppose que vos questions concernent le code Java. Si c'est le cas, vous n'avez en fait pas besoin de plugins supplémentaires pour accomplir 1). Vous pouvez simplement aller dans Préférences -> Java -> Éditeur -> Enregistrer les actions et le configurer pour supprimer les espaces de fin .

Par les sons de celui-ci, vous voulez également en faire un cadre pour toute l'équipe, non? Pour vous simplifier la vie et éviter d'avoir à vous souvenir de l'avoir configuré à chaque fois que vous disposez d'un nouvel espace de travail, vous pouvez définir l'action d'enregistrement en tant que préférence spécifique au projet qui est stockée dans votre SCM avec le code.

Pour ce faire, faites un clic droit sur votre projet et allez dans Propriétés -> Éditeur Java -> Enregistrer les actions . De là, vous pouvez activer les paramètres spécifiques au projet et le configurer pour supprimer les espaces de fin (entre autres choses utiles).

NB : Cette option a été supprimée dans Eclipse Kepler (4.3) et les versions suivantes.

NB # 2: L'option semble être de retour dans Eclipse Luna -Luna Service Release 1a (4.4.1)

gcastro
la source
2
Merci, gcastro - c'est plus facile que AnyEdit. Malheureusement, c'est pour le fichier entier en cours d'édition .. Je ne sais toujours pas comment le faire pour seulement les lignes que j'ai modifiées - il semble que ce soit probablement impossible en ce moment.
Jan Żankowski
7
Bon pour Java; bon pour C / C ++ aussi; mais pas pour Python dans PyDev.
Craig McQueen
14
Pour Python dans PyDev, j'ai fait une demande de fonctionnalité pour cela. Voir: sourceforge.net/tracker/…
Craig McQueen
5
Pour info ... Même concept pour PHP. Préférences -> PHP -> Éditeur -> Enregistrer les actions.
seanmrafferty
1
Je ne sais pas si cela a déjà fonctionné, mais cela ne semble certainement pas fonctionner dans la dernière version d'Eclipse (Kepler). Vous pouvez exécuter le formateur uniquement sur les lignes modifiées, mais le découpage des espaces blancs est limité à toutes les lignes ou l'ignorance des lignes vides - vraiment ennuyeux.
Thor84no
73

Vous n'avez pas besoin de plugin pour le faire. Par exemple, si vous codez JAVA, vous pouvez effacer les espaces blancs de fin en configurant les actions de sauvegarde:

Eclipse 3.6

Preferences-> Java-> Editors-> Save Actions-> Vérifier Perform the selected actions on save-> Vérifier Additional actions-> Cliquez sur leConfigure.. bouton.

Dans l' Code organizingonglet, cochezRemove trailing whitespace

Dave
la source
4
Il s'agit de la première réponse qui conseille spécifiquement de rechercher sous "Actions supplémentaires" pour "Supprimer les espaces de fin". Merci.
DavidRR
7
cela ne fonctionne que pour les fichiers .java, je travaille généralement avec des dizaines d'extensions
Eildosa
Fonctionne pour Eclipse 4.12
Matilda Smeds
46

PyDev peut le faire soit par Ctrl+ Shift+ Fsi vous avez défini l'option de formatage de code, soit par during saving:

Eclipse-> Window-> Preferences-> PyDev-> Editor-> Code Style->Code Formatter :

J'utilise au moins ceux-ci:

  • Formatage automatique avant l'enregistrement
  • Lignes de garniture droites?
  • Ajouter une nouvelle ligne à la fin du fichier
Ciantic
la source
5
Cela ne couvre pas la question de supprimer l'espace uniquement des lignes modifiées. C'est aussi une fonctionnalité dangereuse car elle exécute toutes les options du formateur de code et une option non cochée n'est pas la même chose que «ignorer / ne pas utiliser». ex: si "Utiliser l'espace après des virgules" n'est pas coché, Formateur de code supprimera ces espaces au lieu d'ignorer l'option.
JCotton
7
Il existe une nouvelle option dans PyDev Code Formatter: lors de l'enregistrement, n'appliquez la mise en forme que sur les lignes modifiées.
warvariuc
2
-1 pour avoir donné une réponse trop générale - la question portait uniquement sur les espaces blancs; l'activation du formatage automatique du code signifie que vos validations source commenceront à contenir des éléments non planifiés, provoquant un historique désordonné car les validations contiennent des éléments qui ne sont pas liés au titre de la validation.
Erik Kaplun
36

Faites ce qui suit:

Preferences-> Java-> Editor->Save Actions

entrez la description de l'image ici

Sumit Singh
la source
19

Vous pouvez mapper une clé dans Eclipse pour supprimer manuellement les espaces vides de fin dans l'ensemble du fichier, mais uniquement sur demande au lieu de automatiquement lors de l'enregistrement. (Préférence / Clés, puis mappez un ensemble de clés sur Fichier / Supprimer les espaces de fin). Cela peut être utile si vous souhaitez nettoyer tous les nouveaux fichiers, mais que le code hérité reste intact.

Une autre stratégie consiste à activer l'affichage visuel des espaces blancs, de sorte qu'au moins vous saurez quand vous ajouterez des espaces à la fin. Pour autant que je sache, il n'y a aucun moyen d'afficher uniquement les espaces de fin, mais je serai heureux d'avoir tort.

Kena
la source
Merci beaucoup pour cette réponse! Jusqu'à présent, c'est le seul moyen que j'ai trouvé pour le plugin Aptana.
Igor Zinov'yev,
11

À la rigueur, pour les éditeurs qui ne prennent pas du tout en charge la suppression des espaces de fin (par exemple, l'éditeur XML), vous pouvez le supprimer de toutes les lignes en effectuant une recherche et un remplacement, en activant des expressions régulières, puis en trouvant "[\ t] + $ "et en le remplaçant par" "(vide). Il y a probablement une meilleure expression rationnelle pour le faire, mais cela fonctionne pour moi sans avoir besoin d'installer AnyEdit.

Malvineous
la source
9

Je dirais aussi AnyEdit. Il ne fournit pas ces fonctionnalités spécifiques. Cependant, si vous et votre équipe utilisez les fonctionnalités AnyEdit à chaque action de sauvegarde, alors lorsque vous ouvrez un fichier, il ne doit pas avoir d'espace blanc de fin.

Par conséquent, si vous modifiez ce fichier et si vous ajoutez de nouveaux espaces de fin, puis pendant l'opération d'enregistrement, AnyEdit supprimera uniquement ces nouveaux espaces, car ce sont les seuls espaces de fin de ce fichier.

Si, pour certaines raisons, vous devez conserver les espaces de fin sur les lignes qui n'ont pas été modifiées par vous, alors je n'ai pas de réponse pour vous, et je ne suis pas sûr que ce type de fonctionnalité existe dans un plugin Eclipse ...

Romain Linsolas
la source
4
Oui, je voudrais garder les espaces sur les lignes que je n'ai pas modifiés. C'est le comportement par défaut d'Intellij Idea (supprimer les espaces sur mes lignes, les conserver sur les autres), et j'aimerais obtenir cela dans Eclipse . Merci d'avoir répondu.
Jan Żankowski
5

Pour php il y a aussi une option:entrez la description de l'image ici

HeyMan
la source
4

Il existe un moyen très simple de le faire avec sed, l'outil de ligne de commande Unix. Vous pourriez probablement créer une macro dans Eclipse pour exécuter ceci:

sed -i 's/[[:space:]]*$//' <filename>
jcoffland
la source
4

Comme l'a dit @Malvineous, ce n'est pas professionnel mais une solution de contournement pour utiliser la méthode Find / Replace pour supprimer l'espace de fin (ci-dessous, y compris l'onglet U + 0009 et les espaces U + 0020).
Appuyez simplement sur Ctrl + F (ou commande + F)

  1. Trouver [\t ][\t ]*$
  2. Remplacer par une chaîne vide
  3. Utiliser des expressions régulières
  4. Remplace tout

extra:
Pour supprimer l’espace de début, recherchez ^[\t ][\t ]*au lieu de [\t ][\t ]*$
Pour supprimer les lignes vierges, recherchez^\s*$\r?\n

Fuweichin
la source
1
Et au [\t ]+$lieu de [\t ][\t ]*$?
Jonah Graham
1

Je ne connais aucune solution pour la deuxième partie de votre question. La raison en est qu'il n'est pas clair comment définir j'ai changé . Changé quand? Juste entre 2 sauvegardes ou entre commits ... Fondamentalement - oubliez-le.

Je suppose que vous souhaitez vous en tenir à certaines directives, mais ne touchez pas au reste du code. Mais la directive doit être utilisée dans l'ensemble, et non pour les piqûres et les morceaux. Donc, ma suggestion est - changez tout le code en ligne directrice: c'est une opération unique, mais assurez-vous que tous vos développeurs ont le même plugin (AnyEdit) avec les mêmes paramètres pour le projet.

van
la source
7
Puisqu'il s'agit d'une action de sauvegarde, les lignes seront modifiées entre les sauvegardes. Eclipse garde déjà une trace de ces lignes pour le marquage dans la barre latérale.
starblue
0

J'ai utilisé cette commande pour git: git config --global core.whitespace cr-at-eol

Il supprime les ^Mcaractères qui suivent.

user7577563
la source