Couper les espaces de fin dans Xcode

103

Existe-t-il un moyen de forcer Xcode à couper les espaces de fin lorsque j'enregistre le fichier?

J'utilise la version 3.1.3 si cela compte.

Alexandre Gladysh
la source

Réponses:

22

Vous pouvez créer un script et le lier à un raccourci clavier:

  • Sélectionnez le menu Scripts> Modifier les scripts utilisateur ...
  • Appuyez sur le bouton + et sélectionnez Nouveau script Shell
  • Donnez-lui un nom comme "Supprimer les espaces de fin", et donnez-lui un raccourci comme ⌃⇧R.
  • Réglez l'entrée sur «Sélection» et la sortie sur «Remplacer la sélection»

Entrez ensuite le script suivant:

#!/usr/bin/perl

while (<>) {
    s/\s+$//;
    print "$_\n";
}
Darren
la source
9
Ah, oui, si simple ... Merci. Existe-t-il un moyen d'associer cela à l'enregistrement de fichiers?
Alexander Gladysh
Pour travailler sur un fichier entier (ce que vous souhaiteriez probablement faire), définissez Entrée sur «Document entier» et Sortie sur «Remplacer le contenu du document». Cependant, cela laisse le curseur au bas du fichier.
SMBiggs
7
Cette réponse est obsolète depuis Xcode 4.4. Voir la réponse de Martin Stolz.
Basil Bourque
239

À partir de Xcode 4.4, les espaces seront automatiquement coupés par défaut, sauf si la ligne est entièrement composée d'espaces. Vous pouvez également activer Including whitespace-only linespour résoudre ce problème, qui n'est pas actif par défaut.

Aller à Xcode > Preferences > Text Editing > While editing

Capture d'écran des préférences Xcode

Martin Stolz
la source
15
Ce paramètre ne coupe l'espace blanc de fin d'une ligne que lorsque le curseur a quitté cette ligne. Ainsi, il vous permet toujours d'enregistrer un fichier avec une ligne d'espacement de fin, si le curseur est sur cette ligne lors de l'enregistrement.
ma11hew28
7
Pourquoi diable n'est-ce pas la valeur par défaut? Si vous avez un fichier existant avec des espaces à la fin, marquez simplement tout, coupez, enregistrez, collez, enregistrez.
friederbluemle
Cela doit remplacer la solution de script hacky sur cette réponse.
Urda
7
L'utilisation de ce + ctrl-isur tous les fichiers existants prend en charge les espaces de fin
Kirualex
24

J'utilise le plugin Xcode de Google Toolbox pour Mac , il ajoute un paramètre "Corriger les espaces lors de l'enregistrement" qui réduit les espaces de fin lors de l'enregistrement. Cela m'a beaucoup manqué chez emacs.

Maxime
la source
1
J'utilise également ce plugin. Il fait ce qu'il dit.
Nathan
Ce serait parfait, malheureusement cela ne fonctionne pas sur Xcode 4 pour le moment :(
deepwell
6
Nous avons maintenant une prise en charge de base de Xcode 4. Voir notre nouveau plugin
dmaclach
1
Où puis-je trouver le paramètre "Corriger les espaces lors de l'enregistrement"?
jhasse
J'ai finalement réussi à faire fonctionner GTM sur Xcode 4.3.2, mais les instructions d'installation du wiki GTM semblaient être invalides. Au lieu de placer le .xcplugin ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins(selon les instructions de Google), j'ai dû le mettre /Applications/Xcode.app/Contents/PlugInset redémarrer Xcode.
Kristofer Sommestad
3

Pour Xcode 8, j'ai installé le plug-in swimat Xcode, pour le formatage du code Swift, qui supprimait tous les espaces de fin et les lignes blanches uniquement.

Méthodes d'installation

  1. Installer via homebrew-cask:

    brew cask install swimat
  2. Téléchargez l'application directement:
    https://github.com/Jintin/Swimat/releases/download/v1.3.5/Swimat.zip

  3. Clonez la extensionbranche et archivez sur Mac App.

Usage

Une fois installé, vous pouvez exécuter Swimat dans Xcode via Editor -> Swimat -> Format.

moollaza
la source
cet outil ne supprime pas les lignes vides.
Mehdico
1

Ce n'est pas possible dans Xcode 3.2

Éditer:

J'ai répondu si brièvement à cette question car il n'y a aucun moyen de le faire correctement .

Bien sûr, comme il s'agit d'un logiciel, vous pouvez tout faire: en commençant par les hacks Input Manager ou d'autres moyens d'injection de code jusqu'à l'interception du clavier à l'échelle du système, vous pouvez modifier votre système local pour faire n'importe quoi à tout moment. Vous pouvez configurer une action de dossier Applescript (arrgh) ou utiliser un démon de lancement et la fonction FSEvents pour regarder vos fichiers de code source.

Vous pouvez également ajouter quelques scripts à Xcode (scripts utilisateur dans le menu, phases de script dans les cibles, actions personnalisées dans l'organisateur, il y a même la possibilité très inconnue d'un script de démarrage), mais toutes ces solutions sont imparfaites, car elles impliquent le utilisateur ou configuration personnalisée sur la machine de l'utilisateur.

Je ne suis pas au courant d'une solution qui fonctionne simplement après avoir extrait un projet de SCM. Je crois qu'il y a besoin de cela et de scripts de personnalisation similaires, j'ai donc déposé un bogue (radar 7203835, "Fonctionnalité: plus de déclencheurs de script utilisateur dans le workflow Xcode"). Je n'ai pas encore reçu de commentaires.

Voici le texte complet de l'entrée radar:

Il serait utile d'avoir plus d'emplacements pour exécuter des scripts dans Xcode.

Exemples:

  1. Scripts de
    pré-génération Les scripts de pré-génération peuvent être utilisés pour créer des prérequis tels que des fichiers * .xcconfig ou des en-têtes config.h. Cela n'est pas possible avec une "phase d'exécution du script de génération", car le suivi des dépendances a lieu avant le déclenchement d'une phase de génération.

  2. Scripts de post-construction
    Semblables à ci-dessus, mais exécutés une fois la construction terminée (y compris la signature de code, etc.). Utile pour l'emballage supplémentaire, le contrôle de validité, etc.

  3. Scripts de validation avant / après SCM.
    Pour vérifier l'intégrité du projet.

  4. Script de sauvegarde avant / après le fichier.
    Pour vérifier / modifier un fichier avant de l'enregistrer. Par exemple, exécutez des embellisseurs Cody

  5. Actions de projet personnalisées.
    Je suis conscient de la capacité de l'organisateur à définir des actions arbitraires. Mais c'est une fonctionnalité par utilisateur (ne fait pas partie du projet). Je voudrais définir des actions comme construire ou nettoyer qui apparaissent dans le menu de construction et qui font partie d'un projet.

Nikolai Ruhe
la source
Modifié pour répondre aux raisons pour lesquelles les solutions de contournement ne sont pas satisfaisantes dans ce cas
Nikolai Ruhe
2
Merci. Bien que je sois en faveur de le faire de la bonne manière, je me contenterais de tout hack pas trop intrusif. Ces espaces blancs supplémentaires sont vraiment ennuyeux.
Alexander Gladysh
0

Le moyen le meilleur et le plus simple sans utiliser de scripts, de hacks et bien plus encore. Allez simplement à Rechercher et remplacer le moyen le meilleur et le plus simple sans utiliser de scripts, de hacks et bien plus encore. Allez simplement dans Rechercher et remplacer et appuyez sur "alt / option + espace" et appuyez sur le bouton "espace" dans la barre de remplacement, puis cliquez sur tout remplacer. Il remplacera les espaces blancs par des espaces normaux et l'avertissement / l'erreur disparaîtra !!

H2zee
la source
1
Cela supprime-t-il uniquement les espaces de fin comme demandé dans la question?
Blastfurnace le