Comment corriger / convertir l'indentation d'espace dans Sublime Text?


228

Exemple: si j'ai un document avec une indentation de 2 espaces et que je souhaite qu'il ait une indentation de 4 espaces, comment puis-je le convertir automatiquement à l'aide de l'éditeur de texte sublime?

Réponses:


525

Voici une astuce intéressante dans Sublime Text 2 ou 3 pour convertir votre espacement d'indentation dans un document.

TL; DR:

Conversion de 2 espaces à 4 espaces:

Assurez-vous que la largeur de tabulation est définie sur 2. Convertissez votre indentation à 2 espaces en tabulations, passez à la largeur de tabulation 4, puis reconvertissez-la en espaces.

La description détaillée:

Aller à:

View -> Indentation

Il devrait se lire:

  • Indent using spaces [x]
  • Tab width: 2

Sélectionner:

  • Convert Indentation to Tabs

Sélectionnez ensuite:

  • Tab width: 4
  • Convert Indentation to Spaces

Terminé.


5
Je vous remercie! : D Gain de temps. Remarque. Vous pouvez également faire "find: space-space => tout sélectionner => onglet"
Automatico

11
J'ai créé une macro pour sublime qui fait tout cela pour vous gist.github.com/joshmfrankel/5707020 . Profitez :-)
Josh Frankel

2
Je tiens à souligner que le "Convertir l'indentation en espaces" fonctionne également si vous avez un fichier texte où les onglets ne prennent pas toute la largeur de l'onglet. Par exemple, pour un fichier dans lequel l'auteur utilise des onglets pour formater les colonnes, donc si vous effectuez une recherche et un remplacement sur les onglets, les colonnes résultantes ne seront plus alignées. L'utilisation de "Convertir l'indentation en espaces" le maintiendra cependant correctement aligné
Joe Pinsonault

J'ai également créé des macros et des exemples de raccourcis clavier pour cela pour un collègue avant de voir la macro de Josh. Le mien utilise ctrl + 2 et ctrl + 4 pour permettre le basculement: gist.github.com/beaugunderson/8588871
Beau

74

En fait, j'ai trouvé qu'il était préférable pour ma raison d'avoir des préférences utilisateur définies comme suit:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

Le detect_indentation: falseest particulièrement important, car il oblige Sublime à honorer ces paramètres dans chaque fichier, par opposition aux View -> Indentationparamètres.

Si vous voulez avoir de la fantaisie, vous pouvez également définir un raccourci clavier pour ré-indenter automatiquement votre code (YMMV) en collant ce qui suit dans Sublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

et pour visualiser l'espace blanc:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

J'ai trouvé, dans mon esprit, une solution plus simple que Magne:

Sur mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

Sur les fenêtres ou autres plates-formes, changez cmd+fet alt+enteravec ce que vous findet les select allraccourcis clavier sont.

Remarque: cette méthode est sujette à des "erreurs" si vous avez plus d'un espace dans votre code. C'est donc moins sûr que la méthode de Magne, mais c'est plus rapide (du moins pour moi).


Je ne pouvais pas faire fonctionner cela en tant que tel, mais j'ai utilisé le principe et j'ai juste fait une recherche et un remplacement (cmd-option-F sur Mac) et remplacé "" (4 espaces) par "" (2 espaces). Et ça a marché!
evanbikes

J'ai trouvé une autre façon de le faire maintenant, mais c'est spécifique à la langue. Si vous avez un plugin de formatage comme le, RubyFormatvous pouvez simplement définir la taille d'onglet souhaitée, puis faire un reformatage du code. Dans le cas de RubyFormatce serait cmd+shift+R.
Automatico

7

Alors que la plupart des suggestions fonctionnent lors de la conversion de 2 -> 4 espaces. J'ai rencontré des problèmes lors de la conversion de 4 -> 2.

Voici ce que j'ai fini par utiliser:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

Si vous trouvez que la recherche et le remplacement sont plus rapides à utiliser, vous pouvez utiliser un remplacement regex comme celui-ci:

Find (regex): (^|\G) {2}(Au lieu de "{2}", <space>{2} vous pouvez simplement écrire deux espaces. Utilisez-le ici pour plus de clarté.)

Remplacez par 4 espaces, ou ce que vous voulez, comme \t.


5

J'ai écrit un plugin pour cela. Vous pouvez le trouver ici ou rechercher "ReIndent" dans le contrôle de package. Il fait principalement la même chose que Kyle Finley a écrit mais de manière pratique avec des raccourcis pour convertir entre 2 et 4 et vice-versa.


2

Vous devez ajouter ce code à vos raccourcis clavier personnalisés:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

en appuyant sur ctrl + f12, il réindentera votre fichier à une taille d'onglet de 4. si vous voulez une taille d'onglet différente, vous changez simplement le numéro de "valeur". Le format est un simple json.


Je l'aime merci! J'ai ajouté 2 et 4 comme ceci:{ "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
JREAM

0

La chose la plus simple que j'ai faite était,

changé mon retrait en onglets

et cela a résolu mon problème.

Vous pouvez faire la même chose,

aux espaces

ainsi que par votre besoin.

Mentionné l'instantané de la même chose.

entrez la description de l'image ici


Oui, mais la question demande la situation lorsque vous commencez et finissez avec l'indentation comme espaces.
Magne

0

Récemment, j'ai rencontré un problème similaire. J'utilisais l'éditeur sublime. ce n'est pas un problème avec le code mais avec l'éditeur.

La modification ci-dessous des paramètres de préférence a fonctionné pour moi.

Menu Texte sublime -> Préférences -> Paramètres: spécifiques à la syntaxe :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.