2017-05-31 2 views
1

Existe-t-il un moyen, un plugin, une macro ou autre pour que Sublime Text 3 sélectionne automatiquement le texte qui vient d'être collé?Sélection automatique du texte collé dans Sublime Text 3

Je dois copier et coller des données JSON, mais le texte collé n'est jamais aligné avec le texte environnant. Coller et mettre en retrait ne fonctionne pas correctement pour cela. Qu'est-ce que le travail est la fonctionnalité de réindentation, mais il me faut pour sélectionner un bloc de texte et en appuyant sur une touche de raccourci. Donc, après le collage, je bénéficierais de la sélection automatique du bloc de texte juste collé, de sorte que je peux simplement appuyer sur la touche de raccourci de réindentation pour indenter correctement ce que j'ai collé.

De plus, il serait encore mieux si je pouvais lier le processus à un raccourci clavier, donc:

  • Sélectionnez le texte
  • Copier
  • Appuyez sur une touche de raccourci d'auto défini pour exécuter une macro (?)
  • Cette macro pâtes le texte, sélectionne le texte collé et exécute le raccourci clavier reindent (*)

* donc, fondamentalement, je voudrais faire une combinaison de touches, par exemple, ctrl + shift + b pour effectuer les opérations suivantes:

  • ctrl + v
  • D'une certaine manière sélectionnez le texte collé
  • Ctrl + Maj + f

Répondre

2

Vous pouvez créer un plugin pour le faire, et l'exécuter avec un raccourci clavier:

  • dans le menu Outils -> développeur -> Nouveau plug-in ...
  • tout sélectionner et remplacer par ce qui suit
import sublime 
import sublime_plugin 


class PasteAndReindentCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     before_selections = [sel for sel in self.view.sel()] 
     self.view.run_command('paste') 
     after_selections = [sel for sel in self.view.sel()] 
     new_selections = list() 
     delta = 0 
     for before, after in zip(before_selections, after_selections): 
      new = sublime.Region(before.begin() + delta, after.end()) 
      delta = after.end() - before.end() 
      new_selections.append(new) 
     self.view.sel().clear() 
     self.view.sel().add_all(new_selections) 
     self.view.run_command('reindent') 
  • enregistrer, dans le dossier ST suggère (Packages/User/) comme quelque chose comme paste_and_reindent.py
  • ajouter ce qui suit à vos raccourcis clavier de l'utilisateur { "keys": ["ctrl+shift+b"], "command": "paste_and_reindent" },

Notez que Ctrl + Maj + B wi ll remplacera la liaison par défaut pour "Build With".

Comment ça marche:

  • lorsque la combinaison de touches est pressée, elle exécute la nouvelle commande créée dans le plugin
  • ce stocke la sélection de texte actuel positionne
  • il effectue l'opération de collage
  • puis il obtient les nouvelles positions de curseur de texte
  • puis il compare les anciennes positions aux nouvelles, et sélectionne le texte qui a été collé
  • il exécute la commande reindent

Vous pouvez l'obtenir pour effacer les sélections nouveau par la suite (en repositionnant le texte carets à la fin des sélections - à savoir le comportement par défaut après le collage) en faisant une autre comparaison de la sélections avant et après la réindentation.

+0

Fonctionne comme un charme et a pris seulement une minute à faire comme vous l'avez suggéré, merci! – Piwwoli