web-dev-qa-db-fra.com

Est-il possible de chaîner des raccourcis clavier en sublime texte 2?

Il y a des moments dans Sublime Text lorsque je veux révéler le fichier actuel dans la barre latérale, puis naviguer dans la structure des dossiers.

Ceci peut être réalisé en utilisant les commandes reveal_in_side_bar et focus_side_bar cependant, ils doivent être liés à deux combinaisons de touches distinctes, donc je dois faire 2 combinaisons de clavier pour atteindre mon objectif alors que, idéalement, je n'en voudrais qu'une (je suis paresseux).

Existe-t-il un moyen de lier plusieurs commandes à une seule combinaison de touches? par exemple. quelque chose comme ça:

{
  "keys": ["alt+shift+l"], 
  "commands": ["reveal_in_side_bar", "focus_side_bar"]
},

Solution

Basé sur les réponses de @ artem-ivanyk et @ d_rail

1) Outils → Nouveau plugin

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

Enregistrer sous RevealInSideBarAndFocus.py

2) Sublime Text 2 → Préférences → Raccourcis clavier - Utilisateur

Liez-le au raccourci:

{ "keys": ["alt+shift+l"], "command": "reveal_in_side_bar_and_focus" }
48
James Hollingworth

Mise à jour de la réponse de @Artem Ivanyk. Je ne sais pas ce qui a changé dans Sublime, mais cette solution n'a pas fonctionné pour moi, mais je l'ai fait fonctionner:

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

.

{ "keys": ["ctrl+shift+8"], "command": "reveal_in_side_bar_and_focus" }

Btw, j'utilise Build 2220

30
d_rail

Bien que la question remonte à un an, cela pourrait aider les personnes qui recherchent toujours une réponse.

Récemment, un nouveau paquet a été développé par jisaacks, appelé Chain of command. Il a pour tâche principale de faire exactement ce que vous demandez, de chaîner plusieurs commandes à la fois.

Le package peut être trouvé ici: https://github.com/jisaacks/ChainOfCommand

Un exemple du fonctionnement peut être trouvé ci-dessous.

Supposons que vous vouliez une liaison de clé pour dupliquer le fichier actuel. Vous pouvez définir cette liaison de clé:

{
  "keys": ["super+shift+option+d"], 
  "command": "chain", 
  "args": {
    "commands": [
      ["select_all"],
      ["copy"],
      ["new_file"],
      ["paste"],
      ["save"]
    ]
  }
}

Cela sélectionnerait tout le texte, le copierait, créerait un nouveau fichier, collerait le texte, puis ouvrirait la boîte de dialogue d'enregistrement du fichier.

Source: https://sublime.wbond.net/packages/Chain%20of%20Command .

34
Winfried

Nous sommes tombés sur un problème similaire. Lorsque vous essayez d'enregistrer des macros, ce qui impliquait "Sauver" commande, la console m'a jeté „Commande de macros inconnue enregistrer“ message. A travaillé mon chemin avec un plugin élémentaire.

1) Outils → Nouveau plugin

import sublime, sublime_plugin

class MyChainedActionsCommand():
    def run(self):
        self.view.run_command("reveal_in_side_bar")
        self.view.run_command("focus_side_bar")

Vous devez utiliser la notation en majuscule pour le nom de classe. ST2 expose cette classe pour le nom de la commande avec le suffixe "Command" supprimé et le reste converti en notation de soulignement en minuscules. C'est à dire. dans cet exemple MyChainedActionsCommand pourrait être exécuté dans la console de sublime en tapant: view.run_command("my_chained_actions")

2) Sublime Text 2 → Préférences → Raccourcis clavier - Utilisateur

Liez-le au raccourci:

{ "keys": ["alt+shift+l"], "command": "my_chained_actions" }

Tenez compte des virgules.

25
Artem Ivanyk

Jetez un oeil à ce Gist .

J'ai essayé de mettre en œuvre cela depuis longtemps et j'ai trouvé cela par accident.

N'oubliez pas de lire la "documentation" fournie. J'ai continué à essayer de faire ce travail, jusqu'à ce que je réalise que je ne passais pas la clé "contextuelle".

8
mirandacelso

Vous pouvez créer une macro pour ce faire. Pour Sublime Text, les macros sont essentiellement des commandes chaînées. Vous créez ensuite une liaison de touches pour cette macro. Vous pouvez créer une macro en utilisant Tools > Record Macro, puis exécutez vos commandes (attention aux macros qui enregistrent également les frappes, vous voudrez donc utiliser les commandes de la barre de menu pour ne pas provoquer de conflits), puis Stop Recording, puis Save Macro. Après avoir enregistré la macro, vous pouvez l'ouvrir de nouveau dans Sublime Text pour vous assurer qu'elle n'a enregistré que ce que vous voulez.

4
BoundinCode

En s'appuyant sur Artem Ivanyk réponse, voici une version de ChainedActions qui fonctionne avec des arguments. Il prend deux arguments pour actions et args. Les deux sont des listes et chaque commande de la liste est exécutée avec les arguments correspondants. Cet exemple, certes stupide, insère deux extraits: view.run_command("chained_actions", {"actions":["insert_snippet","insert_snippet"],"args":[{"contents": " ($ 0) "}, {" contenu ":" 1 ($ 0) "}]})`

import sublime
import sublime_plugin

class ChainedActionsCommand(sublime_plugin.TextCommand):
    def run(self, edit, actions, args):
        for i, action in enumerate(actions):
            self.view.run_command(action, args[i])
1
user2503795

J'ai essayé d'utiliser la même commande mais je me suis retrouvé avec un bug qui, lorsque le dossier du fichier était déjà déplié, sublime déplaçait le haut de ma barre latérale de focus, où je pouvais voir les fichiers ouverts. Pour améliorer ce comportement, j'ai écrit un nouveau plugin qui garantit qu'il se comportera comme je le souhaite, le voici https://github.com/miguelgraz/FocusFileOnSidebar

1
Miguelgraz

J'utilise Sublime text3 build - 3083. Il résout le problème simplement en le "révélant dans la barre latérale", le focus vient automatiquement.

J'ai ajouté un raccourci clavier personnalisé pour "Révéler dans la barre latérale" en ajoutant la déclaration suivante sous Préférences-> Raccourcis clavier-Utilisateur:

[
    { "keys": ["ctrl+shift+r"], "command": "reveal_in_side_bar"}
]

L'option - 'Révéler dans la barre latérale' était manquante pour les types de fichiers image, car le menu contextuel n'apparaît pas avec le clic droit de la souris. Le raccourci clavier personnalisé est pratique dans cette situation.

1
Sudheesh.M.S