Sublime Text 3, convertissez les espaces en tabulations

192

Je sais qu'il y a beaucoup de messages à ce sujet, mais je n'ai pas pu le faire fonctionner.
J'utilise des onglets pour le codage. Existe-t-il un moyen de convertir toujours les espaces en tabulations? Ie sur les fichiers ouverts et sur Enregistrer? Quelqu'un a une idée?

// edit:
Mon désir est de le faire automatiquement ! -> ouvrir, sauvegarder ou à la volée
Quelqu'un sait-il faire?


J'ai essayé ceci :

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

Et voici mes paramètres utilisateur:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}
Chris
la source
Le plugin que vous avez posté fonctionne vraiment bien pour moi sur ST3, build 3059. Pouvez-vous ouvrir la console avec Ctrl + ~et voir si cela vous donne des erreurs de plugin? Et si Package Control est installé, pouvez-vous voir s'il ExpandTabsOnSaveest répertorié comme un plugin installé?
angerson
fou, semble être installé (répertorié sous la liste des packages) et dans la console, je ne trouve aucune erreur :-(
chris
Essayez d'ajouter print("debug")ou similaire au plugin pour voir s'il est en cours d'exécution ou non lors de l'enregistrement.
angerson
omg, ses œuvres! était le mauvais répertoire sur la machine Windows, les packages sont répertoriés dans l'utilisateur /.../ AppData / Roaming / SublimeText3 / Packages Merci beaucoup!
chris
Assurez-vous de définir cette vue comme vue active de la fenêtre avant d'exécuter la commande. Ce n'est peut-être pas très probable, mais au fur et à mesure que vous l'avez publié, il est possible qu'il développe les onglets d'une page différente de celle que vous essayez d'enregistrer. Même avec la vue de mise au point, je suppose qu'il y a une chance qu'elle puisse enregistrer dans un mauvais fichier, mais au moins vous pouvez minimiser le risque.
skuroda

Réponses:

378

Dans le coin inférieur droit de votre fenêtre Sublime Text, vous verrez un indicateur d'indentation qui ressemble beaucoup à ceci:

Menu d'options d'indentation

En cliquant dessus , ouvre un menu avec des options pour régler vos préférences d'indentation, et plus important encore , Convert Indentation to Tabs/Spaces.

entrez la description de l'image ici

Le même menu est répertorié sous View -> Indentation.

Angerson
la source
42
Oui je sais. Mon désir est de faire cela automatiquement ... une idée?
chris
2
@chris ツ Ah. Pourriez-vous reformuler votre question pour rendre cela plus explicitement évident? J'ai manqué votre signification, donc d'autres pourraient aussi.
angerson
Je n'ai pas cette barre d'état en bas - comment puis-je l'obtenir?
Geoidesic
1
Et cela se fait sur l'ensemble du fichier, et ne peut pas être fait uniquement sur une sélection.
not2qubit
Très agréable. J'ai aussi fait 'commande-a' pour tout sélectionner, 'commande- [' pour annuler l'indentation, puis 'éditer> ligne> réindenter' pour réparer le fichier. Je suis sûr que cela peut être intégré dans une macro.
Brooks DuBois
130

Au bas de la fenêtre Sublime, vous verrez quelque chose représentant votre paramètre d'onglet / espace.

Vous obtiendrez alors une liste déroulante avec un tas d'options. Les options qui vous intéressent sont:

  • Convertir l'indentation en espaces
  • Convertir l'indentation en tabulations

Appliquez le paramètre souhaité à l'ensemble du document.

J'espère que cela t'aides.

erier
la source
2
Je souhaite que cela puisse être fait au chargement et automatiquement ... pour tous les fichiers que j'ouvre. Je veux dire: la conversion des espaces d'indentation en tabulations. Il serait exécuté automatiquement au chargement :-)
Filip OvertoneSinger Rydlo
1
Je vous entends là-dessus. Je préfère les onglets MAIS je comprends pourquoi beaucoup de code est écrit avec des espaces. Avec les espaces, il n'y aura pas d'incohérences entre les IDE - un espace est un espace est un espace. Les onglets peuvent occuper un nombre variable d'espaces entre les IDE et rendre le code bizarre.
erier
Bonjour @Green - qu'est-ce qui ne fonctionne pas? Mettons cela au point ...
erier
80

Comme vous le savez peut-être déjà, vous pouvez personnaliser vos paramètres d'indentation dans Preferences.sublime-settings, par exemple:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

Cela configurera votre éditeur pour utiliser des onglets de 4 espaces de large et remplacera le comportement par défaut qui oblige Sublime à faire correspondre l'indentation du fichier que vous éditez. Avec ces paramètres, la ré-indentation du fichier entraînera le remplacement des espaces par des tabulations.

En ce qui concerne la ré-indentation automatique lors de l'ouverture d'un fichier, ce n'est pas aussi facile (mais ce n'est probablement pas une bonne idée car les changements d'espaces font des ravages sur les fichiers diffs). Quel pourrait être le meilleur plan d'action: vous pouvez mapper un raccourci pour la ré-indention et le déclencher simplement lorsque vous ouvrez un nouveau fichier qui doit être corrigé.

Justin
la source
13

Vous pouvez utiliser la palette de commandes pour résoudre ce problème.

Étape 1: Ctrl + Shift + P(pour activer la palette de commandes)

Étape 2: Tapez "Indentation", choisissez "Indentation: Convert to Tabs"

Jojoleo
la source
1
Excellent. Je vous remercie.
RJ
Meilleure solution. Merci!
Matthew K
7

Dans mon cas, cette ligne a résolu le problème:

"translate_tabs_to_spaces": false
vljs
la source
4

Voici une solution qui se convertira automatiquement en onglets chaque fois que vous ouvrez un fichier.

Créez ce fichier .../Packages/User/on_file_load.py::

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

REMARQUE. Cela entraîne le fichier dans un état non enregistré après son ouverture, même si aucune conversion d'espace en onglet n'a eu lieu ... peut-être que certains peuvent vous aider avec un correctif pour cela ...

TheStoryCoder
la source
Je pense que vous vouliez dire .../Packages/User/on_file_load.py, non.php
Pranav Nutalapati
@PranavNutalapati Merci d'avoir attrapé ça.
TheStoryCoder
Oui bien sûr. Aucun problème.
Pranav Nutalapati
essayez on_loadau lieu de on_load_async.
Pedro Góes
3

Pour convertir automatiquement les espaces en onglets lors de l'enregistrement , ajoutez le script Python suivant à un sous-dossier nouvellement créé appelé "UnexpandTabsOnSave" dans "$ SUBLIME_HOME $ \ Packages \":

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

Merci pour la ressource initiale.

sean2078
la source
0

Vous pouvez remplacer les onglets par des espaces dans tous les fichiers de projet en:

  1. Faire un Remplacer tout Ctrl+Shif+F
  2. Définir la recherche regex ^\A(.*)$
  3. Définir le répertoire sur Your dir
  4. Remplacer par \1

    entrez la description de l'image ici

  5. Cela entraînera l'ouverture de tous les fichiers de projet, avec leur tampon marqué comme sale. Avec cela, vous pouvez maintenant éventuellement activer ces prochains paramètres Sublime Text, pour couper tous les fichiers à la fin des espaces blancs et assurer une nouvelle ligne à la fin de chaque fichier.

    Vous pouvez activer ces paramètres en allant dans le menu Preferences -> Settingset en ajoutant ces contenus à votre fichier de paramètres:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Ouvrez la console Sublime Text, en allant dans le menu View -> Show Console (Ctrl+`)et exécutez la commande: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. Maintenant, enregistrez tous les fichiers modifiés en allant dans le menu File -> Save All
utilisateur
la source
0

si vous avez un Mac, utilisez simplement l'option d'aide (généralement la dernière option de la barre de menu de Mac) puis tapez: "tab indentation" et choisissez une largeur d'indentation de tabulation

mais généralement, vous pouvez suivre ce chemin: vue -> indentation

Ali
la source
0

Utilisez la commande suivante pour le résoudre:

autopep8 -i <filename>.py
Sharyar Vohra
la source