Я хочу создать макрос Sublime Text 3, чтобы выбрать 111 строк из курсора и удалить их. Я попытался записать это, но все, что он сделал, это удалить один символ назад, и я все еще смущен. Затем я просмотрел макрос вручную и соответствующие команды here, но мне до сих пор не удалось выяснить с этой страницы, возможно ли, что я хочу, и если да, то каким образом. Было бы очень полезно помочь с этим.Sublime Text 3 macro для удаления x строк из каретки
ответ
Нет внутренней команды Sublime Text, которая, к сожалению, сделает несколько ходов одновременно. Однако вы можете определить свою собственную команду перемещения через код плагина, что позволяет вам обойти это.
Для этого маршрута выберите Tools > Developer > New Plugin...
из меню и замените код по умолчанию следующим, затем сохраните файл как файл python (например, move_repeat.py
). Используя этот пункт меню, Sublime гарантирует, что ваш плагин будет сохранен в вашем User
.
import sublime
import sublime_plugin
class MoveRepeatCommand(sublime_plugin.TextCommand):
def run(self, edit, repeat=1, **kwargs):
for num in range(repeat):
self.view.run_command("move", kwargs)
Это реализует новую команду с именем move_repeat
который является падением для замены команды move
, обеспечивая дополнительный аргумент repeat
, который определяет, сколько раз выполнять движения, которые вы предоставляете.
В качестве замены, это может использоваться для перемещения курсора (линий, слов и т. Д.).
Использование этого макроса становится следующее:
[
{
"command": "move_repeat",
"args":
{
"by": "lines",
"extend": true,
"forward": true,
"repeat": 111
}
},
{
"command": "left_delete"
}
]
Здесь я только что создал макрос вручную кодирования его. Если вы хотите сделать это с помощью фактической записи макросов, вам нужно будет пойти по этому другому пути.
Например, вы можете записать макрос, спускаемый только на одну строку и удаляющий, а затем вручную добавить дополнительное значение после факта или вы можете привязать привязку клавиш к повторяющейся команде сначала, а затем выполнить макросъемку.
запутанных Путь
Я с тех пор удалось выяснить способ для записи макросов. По какой-то причине рекордер не регистрирует выбор текста мышью, поэтому мне пришлось выбирать текст с помощью сочетания клавиш во время записи макроса. Это делает работу в том, что он создает макрос, который я описываю, хотя он также приводит к тому, что сценарий, который я предполагаю, намного менее изящный, чем если бы он был написан кем-то в курсе.
Вот сокращенный вариант сценария я закончил с:
[
{
"args":
{
"by": "lines",
"extend": true,
"forward": true
},
"command": "move"
},
{
"args":
{
"by": "lines",
"extend": true,
"forward": true
},
"command": "move"
},
{
"args":
{
"by": "lines",
"extend": true,
"forward": true
},
"command": "move"
},
{
"args":
{
"by": "lines",
"extend": true,
"forward": true
},
"command": "move"
},
{
"args":
{
"by": "lines",
"extend": true,
"forward": true
},
"command": "move"
},
{
"args": null,
"command": "left_delete"
}
]
Это как нефть, как это добирается. Он работает с помощью команды move
для выбора одной строки за раз. Это означает, что этот командный блок необходимо повторить для каждой строки, которую вы хотите выбрать для удаления. В моем случае мне было нужно 111 человек. Надеюсь, кто-то придет и предложит более приятное решение, но до тех пор это делает работу.
Большое спасибо! Мне даже не приходило в голову, что ST3 не позволит повторять команды, и странно, что он не поставляется с таким способом, но это блестящее решение. Я только что вернулся к этому вопросу в нужное время, потому что с тех пор я нашел еще одну необходимость повторить макрокоманду. Один вопрос - заменит «run_command (« move »)' другой работой команды для повторения других команд или специально разработан для работы с 'move'? – Hashim
То, как оно написано, будет повторять любую команду, которую вы положили в 'run_command', да. Хотя вы можете захотеть также переименовать класс в этом случае, так что имя команды имеет больше смысла. – OdatNurd
Блестящий, именно то, что я хотел услышать. Еще одна вещь - как бы эта функция была, если вы повторили ее для произвольного большого числа, и она подошла к концу документа? В настоящее время я ищу что-то, что перестанет работать, как только дело дойдет до конца документа, чтобы гарантировать, что дальнейшие строки не будут удалены, но не знаю, как это будет вести себя в этом сценарии. – Hashim