Можно ли связать команды привязки клавиш в возвышенном тексте 2? - PullRequest
48 голосов
/ 10 марта 2012

В Sublime Text бывают случаи, когда я хочу показать текущий файл на боковой панели, а затем перемещаться по структуре папок.

Это может быть достигнуто с помощью команд reveal_in_side_bar и focus_side_bar, однако они должны быть связаны с двумя отдельными комбинациями клавиш, поэтому мне нужно сделать две комбинации клавиш, чтобы достичь своей цели, когда в идеале я хотел бы простоодин (я ленивый).

Есть ли способ привязать несколько команд к одной комбинации клавиш?например, что-то вроде этого:

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

Решение

На основании ответов @ artem-ivanyk и @ d_rail

1) Инструменты → Новый плагин

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")

Сохранить как RevealInSideBarAndFocus.py

2) Sublime Text 2 → Настройки → Привязки клавиш - Пользователь

Привязать его к ярлыку:

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

Ответы [ 8 ]

34 голосов
/ 31 марта 2014

Хотя этому вопросу уже год, это может помочь людям, которые все еще ищут ответ.

Недавно jisaacks разработал новый пакет под названием Chain of command.Основная задача - выполнить именно то, что вы запрашиваете, объединить несколько команд одновременно.

Пакет можно найти здесь: https://github.com/jisaacks/ChainOfCommand

Пример работы можно найти ниже.,

Допустим, вы хотели, чтобы привязка клавиш дублировала текущий файл.Вы можете установить эту привязку клавиш:

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

Это позволит выделить весь текст, скопировать его, создать новый файл, вставить текст, а затем открыть диалоговое окно сохранения файла.

Источник:https://sublime.wbond.net/packages/Chain%20of%20Command.

30 голосов
/ 02 ноября 2012

Обновление ответа @Artem Ivanyk.Я не знаю, что изменилось в Sublime, но это решение не сработало для меня, но я получил это на работу:

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" }

Кстати, я используюСборка 2220

25 голосов
/ 02 июня 2012

Наткнулся на похожую проблему.При попытке записать макросы, в которых использовалась команда «Сохранить» , консоль выдавала мне сообщение «Неизвестная команда макроса сохранить» .Проработал мой путь с элементарным плагином.

1) Инструменты → Новый плагин

import sublime, sublime_plugin

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

Вам нужно использовать верхний регистр верблюдов для обозначенияимя класса.ST2 предоставляет этот класс для имени команды с удаленным суффиксом «Command» , а остальные преобразуются в нижний регистр и знак подчеркивания.Т.е. в этом примере MyChainedActionsCommand можно запустить в консоли возвышенного ввода: view.run_command("my_chained_actions")

2) Sublime Text 2 → Предпочтения → Привязки клавиш - Пользователь

Свяжите это с ярлыком:

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

Обратите внимание на запятые.

8 голосов
/ 08 февраля 2013

Взгляните на эту суть .

Я давно пытался реализовать это и нашел это случайно.

Не забудьтепрочитать предоставленную «документацию».Я продолжал пытаться сделать эту работу, пока не понял, что не передавал ключ «контекста».

4 голосов
/ 10 марта 2012

Вы можете создать макрос для этого. Для Sublime Text макросы, по сути, являются просто связанными командами. Затем вы создаете привязку клавиш для этого макроса. Вы можете создать макрос с помощью Tools > Record Macro, затем выполнить ваши команды (имейте в виду, что макросы также записывают нажатия клавиш, поэтому вы захотите использовать команды из строки меню, чтобы не вызывать конфликтов), затем Stop Recording, затем Save Macro. После сохранения макроса его можно снова открыть в Sublime Text, чтобы убедиться, что он записал только то, что вам нужно.

1 голос
/ 08 июля 2015

Я использую Sublime text3 build - 3083. Это решает проблему, просто «Показать в боковой панели», фокус приходит автоматически.

Я добавил настраиваемое сочетание клавиш для «Выявить на боковой панели», добавив следующий оператор в «Настройки» -> «Привязки клавиш»:

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

Параметр «Показать в боковой панели» отсутствовал для изображений типов файлов, поскольку контекстное меню не появляется при щелчке правой кнопкой мыши. В этой ситуации удобнее сочетание клавиш.

1 голос
/ 11 июня 2014

Я пытался использовать ту же команду, но в результате я обнаружил ошибку, из-за которой, когда папка файла уже была развернута, возвышенное положение переместило верхнюю часть боковой панели моего фокуса, где я могу видеть открытые файлы.Чтобы улучшить это поведение, я написал новый плагин, который гарантирует, что он будет вести себя так, как я хочу, вот он https://github.com/miguelgraz/FocusFileOnSidebar

1 голос
/ 15 января 2014

Опираясь на Артем Иванык ответить, вот версия ChainedActions, которая работает с аргументами. Требуется два аргумента для actions и args. Оба являются списками, и каждая команда в списке выполняется с соответствующими аргументами. Этот, по общему признанию, глупый пример вставляет два фрагмента: view.run_command("chained_actions", {"actions":["insert_snippet","insert_snippet"],"args":[{"contents": " ($ 0) "}, {" contents ":" 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])
...