Как выполнить команду Sublime plugin из командной строки?
Я использую плагин SimpleSession с Sublime Text 3 (но любой плагин может быть рассмотрен). Если я сохраняю сеанс с несколькими окнами, это создает .simplesession
файл. Как я могу открыть этот файл сеанса, просто нажав на файл? Цель состоит в том, чтобы избежать запуска ST3 и использования палитры команд для запуска команды "Загрузить сеанс". В настоящее время, нажав на .simplesession
файл заставляет ST3 открыть его как обычный файл.
1 ответ
Возвышенный не знает, что simplesession
Файл важен в любом случае, поэтому двойной щелчок по нему откроет его так же, как Sublime откроет любой другой файл.
Поскольку это плагин, который создал файл, этот плагин - единственное, что знает, что это особенное и что с ним делать. Так что вам действительно нужно, чтобы плагин принял меры за вас.
Все действия в Sublime (включая такие простые вещи, как вставка текста) выполняются путем выполнения команды. Здесь это будет команда в плагине, который создал рассматриваемый файл, который скажет ему, что вы хотите выполнить действие, которое вы обычно выполняете вручную, например, загрузку сеанса.
Чтобы сделать это из Sublime, вы должны сделать что-то вроде привязки клавиши клавиатуры к соответствующей команде, добавить ее в меню, палитру команд и т. Д. Если вы хотите выполнить действие извне Sublime, вам нужно сообщить эта команда для возвышенного, чтобы заставить его выполнить.
В ядре Sublime вы можете сделать это, выполнив subl
программа, которая поставляется с Sublime и сообщает ей команду плагина, которую вы хотели бы выполнить.
Хотя это возможно сделать, решение, представленное здесь, требует, чтобы Sublime уже работал из-за технических ограничений в самой Sublime, но об этом чуть позже.
Этот ответ предоставит вам информацию, необходимую для формулирования командной строки, которую нужно выполнить, чтобы запустить команду плагина и выполнить желаемое действие.
Если вы хотите выполнить эту команду в ответ на двойной щелчок по файлу определенного типа (здесь simplesession
файл), то, как вы это делаете, зависит от операционной системы и браузера файлов, который вы используете, и лучше всего задавать как отдельный вопрос.
Предполагая, что вместо этого вам нужен уровень интеграции, при котором у вас есть ярлык на рабочем столе, пункт меню "Пуск" и т. Д., Который делает это, это более просто, поскольку такой ярлык на самом деле является просто визуальной оболочкой, которая выполняет выбранную вами команду.
Опять же, то, как вы это сделаете, будет различным в зависимости от вашей ОС, но важной частью является знание того, какую полную командную строку вам нужно дать ярлыку, чтобы можно было его запустить, и именно этот ответ говорит вам, как построить.
Важное примечание: конкретный пакет в вашем вопросе реализует load_session
команда, которая запрашивает загрузку сеанса из списка ранее созданных сеансов.
Эта команда не принимает аргументов, которые бы указывали ей, какой сеанс загружать, не прося вас сначала выбрать один. В результате, то, что вы хотите, технически невозможно без дополнительной работы, потому что нет способа напрямую сказать load_session
введите файл, который вы хотите открыть.
Для более полной автоматизации вещей в данном конкретном случае необходимо изменить базовый пакет. В частности, либо load_session
Команда будет нуждаться в необязательном аргументе, который, если он будет задан, заставит ее загрузить этот сеанс без предварительного запроса, или потребуется создать новую команду, чтобы сделать то же самое.
Если вы не чувствуете себя достаточно комфортно или обладаете достаточными знаниями для непосредственного внесения таких изменений в пакет, вам нужно либо найти кого-то, кто сделает это за вас, либо (что еще лучше) обсудить это с автором пакета, так как это функция, которую другие могли бы сделать. наверное, тоже понравится.
Первое, что вам нужно знать: "Какую команду в плагине мне нужно выполнить, чтобы делать то, что я хочу?". В некоторых случаях вы уже можете точно знать, какую команду вам нужно использовать, потому что она задокументирована, или вы уже сделали для нее привязку настраиваемого ключа и т. Д.
Если вы не знаете команду, которую вам нужно использовать, проверьте документацию на пакет (если есть), чтобы узнать, упоминает ли он их. В вашем конкретном случае README
на странице пакета специально упоминается список команд, из которых load_session
кажется наиболее подходящим.
В отсутствие какой-либо документации проще всего было бы обратиться непосредственно к Sublime. Для этого выберите View > Show Console
из меню или нажмите сочетание клавиш, связанное с ним, Ctrl + `. В появившейся консоли введите следующую команду и нажмите клавишу ввода.
sublime.log_commands(True)
Теперь, когда вы что-нибудь делаете, эта консоль будет показывать вам, какую именно команду выполняет Sublime, а также любые аргументы, которые она может передавать этой команде. Это остается в силе, пока вы не используете ту же команду с False
или перезапустите Sublime.
При включенном ведении журнала выберите соответствующую команду в палитре команд и посмотрите, что говорит консоль.
Например, с этим пакетом я получаю вывод, подобный следующему:
>>> sublime.log_commands(True)
command: show_overlay {"overlay": "command_palette"}
command: load_session
Это показывает две команды; Сначала я открыл командную палитру, которая использует show_overlay
команда, а затем я выбрал SimpleSession: Load
команда, которая является load_session
Команда без аргументов.
Чтобы заставить Sublime выполнить команду из командной строки, вы используете --command
аргумент командной строки для subl
, Таким образом, чтобы получить Sublime для запуска load_session
Команда, вы можете ввести следующую команду в командной строке / терминале в вашей ОС. Это также команда, которую вы бы указали в ярлыке на рабочем столе.
subl --command "load_session"
Это предполагает, что вы настроили Sublime так, чтобы он находился в пути (то, как вы это делаете, зависит от конкретной ОС). Если работает subl
в терминале выдает ошибку об отсутствующей команде, либо добавьте каталог пути Sublime install в путь, либо используйте полное имя файла вместо subl (e,g. "C:\Program Files\Sublime Text 3\subl"
если вы на Windows); либо требует, чтобы вы знали, в каком месте установлен Sublime.
Если вы хотите использовать команду, которая принимает аргументы, вам необходимо также включить аргументы в команду, так же, как они отображались в консоли выше.
Важно, чтобы имя команды и аргументы рассматривались как один аргумент командной строки, что требует, чтобы вы завернули все это в символы кавычек, так как в противном случае пробелы сделают его представленным как несколько аргументов.
Если вы забудете об этом, Sublime ответит, открыв файлы, названные в честь различных частей команды и аргументов, которые вы пытались открыть, ошибочно полагая, что вы даете ему открыть файлы.
В качестве конкретного примера, чтобы заставить Sublime открывать командную палитру из-за пределов Sublime, команда для этого будет выглядеть следующим образом, если вы работаете в Linux/MacOS:
subl --command 'show_overlay {"overlay": "command_palette"}'
Еще раз обратите внимание, что мы передаем именно то, что консоль показала выше, но все это, команда и аргументы, заключены в одинарные кавычки, чтобы терминал знал, что все значение является одним аргументом.
Это немного усложняет Windows, что не позволяет использовать одинарные кавычки. На этой платформе вам нужно использовать двойные кавычки. Это требует от вас "заключить" внутренние двойные кавычки с лидирующей \
символ, чтобы командный процессор знал, что они являются частью аргумента, а не двойной кавычкой, заканчивающей аргумент.
В случае открытия палитры команд в Windows команда выглядит следующим образом:
subl --command "show_overlay {\"overlay\": \"command_palette\"}"
Имея эту информацию в руках, вы можете настроить что-то вроде ярлыка на рабочем столе для запуска соответствующей команды или потенциально настроить проводник, который вы используете для выполнения команды, особенно когда вы дважды щелкаете по файлу по вашему выбору.
Опять же, то, как вы это сделаете, зависит от используемой вами операционной системы, поэтому я не буду подробно останавливаться на этом здесь, в этом ответе. Просто имейте в виду, что независимо от рассматриваемой ОС, то, что остается неизменным, это то, что вам нужно использовать subl
Команда, как указано выше.
Теперь, в вашем конкретном случае, если используемый вами пакет предоставил команду, которая позволяла бы ему загружать сеанс напрямую, без предварительного запроса, то используемая вами команда должна будет также включить имя файла сеанса в качестве одного из аргументы команды.
Однако, как я упоминал выше, этот пакет в настоящее время не позволяет этого.
Теперь, вот гигантская пещера со всем этим; это работает только если Sublime уже запущен.
subl
Команда обращается к существующей запущенной копии Sublime и дает ей команды, чтобы открыть файл, каталог, выполнить команду, как мы делаем здесь, и так далее. Если Sublime еще не запущен, то subl
сначала запустит Sublime, а затем сообщит ему эти детали.
Sublime запускается и делает его интерфейс доступным для работы сразу же, а затем начинает загружать пакеты и плагины в фоновом режиме. Это делается для того, чтобы вы начали работать над своими файлами, не дожидаясь загрузки всех пакетов.
Проблема в том, что, как только Sublime запускается, subl
передает соответствующие команды, а затем завершает работу, и поскольку пакеты еще не загружены, команда, которую вы хотите выполнить, еще не существует (еще не была загружена), поэтому на самом деле ничего не происходит.
К сожалению, на самом деле не существует удовлетворительного решения этой конкретной проблемы, если вы хотите запустить Sublime, а также выполнить команды.
В качестве возможного обходного пути можно использовать что-то вроде скрипта или пакетного файла, который проверяет, запущен ли Sublime, и если нет, то Запустите его и немного задержите, чтобы позволить плагинам завершить загрузку, затем используйте subl
запустить команду.
Однако это потребует от вас угадать, сколько времени потребуется Sublime для завершения загрузки, что далеко не идеально.