2017-02-21 38 views
0

Я хочу создать макрос Sublime Text 3, чтобы выбрать 111 строк из курсора и удалить их. Я попытался записать это, но все, что он сделал, это удалить один символ назад, и я все еще смущен. Затем я просмотрел макрос вручную и соответствующие команды here, но мне до сих пор не удалось выяснить с этой страницы, возможно ли, что я хочу, и если да, то каким образом. Было бы очень полезно помочь с этим.Sublime Text 3 macro для удаления x строк из каретки

ответ

1

Нет внутренней команды 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" 
    } 
] 

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

Например, вы можете записать макрос, спускаемый только на одну строку и удаляющий, а затем вручную добавить дополнительное значение после факта или вы можете привязать привязку клавиш к повторяющейся команде сначала, а затем выполнить макросъемку.

+0

Большое спасибо! Мне даже не приходило в голову, что ST3 не позволит повторять команды, и странно, что он не поставляется с таким способом, но это блестящее решение. Я только что вернулся к этому вопросу в нужное время, потому что с тех пор я нашел еще одну необходимость повторить макрокоманду. Один вопрос - заменит «run_command (« move »)' другой работой команды для повторения других команд или специально разработан для работы с 'move'? – Hashim

+0

То, как оно написано, будет повторять любую команду, которую вы положили в 'run_command', да. Хотя вы можете захотеть также переименовать класс в этом случае, так что имя команды имеет больше смысла. – OdatNurd

+0

Блестящий, именно то, что я хотел услышать. Еще одна вещь - как бы эта функция была, если вы повторили ее для произвольного большого числа, и она подошла к концу документа? В настоящее время я ищу что-то, что перестанет работать, как только дело дойдет до конца документа, чтобы гарантировать, что дальнейшие строки не будут удалены, но не знаю, как это будет вести себя в этом сценарии. – Hashim

0

запутанных Путь

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

Вот сокращенный вариант сценария я закончил с:

[ 
    { 
    "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 человек. Надеюсь, кто-то придет и предложит более приятное решение, но до тех пор это делает работу.