Автор Тема: Замены, регулярные выражения и макросы (АВТОМАТИЗАЦИЯ РУТИННЫХ ДЕЙСТВИЙ)  (Прочитано 4699 раз)

TRUEMAKER

  • Newbie
  • *
  • Сообщений: 5
Для повторяющихся задач обработки текстов
(по замене Ctrl+H с использованием регулярных выражений) / последовательность 3-5 замен выделенного, обертки тегами и замены /
не получается записать эти действия даже в макрос.
В записанном макросе действия Ctrl+H и значения полей игнорируются.

Кто-то сможет подсказать возможные пути автоматизации?
Хотя-бы поступенчато (чтоб не вводить регулярки каждый раз заново при Ctrl+H форме)

Заранее признателен.

Loac

  • Administrator
  • Hero Member
  • *
  • Сообщений: 612
Можно установить RegReplace.

Добавить свои регулярные выражения Preferences / Package Settings / Reg Replace / Settings – User:

{
    "replacements": {
        "testReplacementsFirst": {
            "find": "class=\"(.+?)\"",
            "replace": "id=\"\\1\"",
        },
        "testReplacementsSecond": {
            "find": "_",
            "replace": "-",
        },
    }
}

Добавить команду в палитру команд (ctrl+p) Preferences / Package Settings / Reg Replace / Commands – User:

[
    {
        "caption": "Reg Replace: Test Replacements",
        "command": "reg_replace",
        "args": {
            "replacements": [
                "testReplacementsFirst",
                "testReplacementsSecond"
            ]
         }
     }
 ]

Или отредактировать файл с макросом Preferences / Browse Packages..., далее папка User:

[
  {
    "command": "reg_replace",
    "args": {
      "replacements": [
        "testReplacementsFirst",
        "testReplacementsSecond"
      ]
    }
  }
]

Тут Preferences / Package Settings / Reg Replace / Settings – Default больше параметров и еще примеры.
« Последнее редактирование: Декабря 08, 2015, 09:13:02 от Loac »

TRUEMAKER

  • Newbie
  • *
  • Сообщений: 5
Можно установить RegReplace.

Спасибо
В принципе работает, НО
  • В RegReplace немного другой синтаксис самих регулярных выражений
  • Не нашел возможности управлять опциями (например в Ctrl+H форме есть свичи замены в выделенном блоке "In Selection" и т.д.) Т.е. заменять НЕ ВЕЗДЕ где совпадет.

И кстати есть ли путь автоматизации обертки тегами выделенной области ?
Например по маске
ul.customclass>li*>a[href="" target="_blank" title=""]
« Последнее редактирование: Декабря 08, 2015, 21:52:37 от TRUEMAKER »

Loac

  • Administrator
  • Hero Member
  • *
  • Сообщений: 612
Для замены в выделенном нужно добавить параметр "selection_only": true в пользовательский файл настроек RegReplace.

Как автоматизировать Emmet не знаю. С наскока сделать не получилось.

TRUEMAKER

  • Newbie
  • *
  • Сообщений: 5
Для действия EMMET удалось записать файл макроса.
Он в главном меню присутствует Tools / Macros / User / name-of-emmet-macros

И работает нормально если предварительно выделить текст.

И нормально после этого работает 2 автозамены через RegReplace (как было указано).

А как бы это все объединить в единое действие?
(1) Или в файле макроса автозамен RegReplace вызвать сначала выполнение общего макроса name-of-emmet-macros
(2) Или хотя бы общий макрос name-of-emmet-macros привязать на хоткей как-то
Как RegReplace конкретный макрос вывести на хоткей я нашел
{
        "keys": ["ctrl+shift+t"],
        "command": "reg_replace",
        "args": {"replacements": ["remove_trailing_spaces"]}
    }

А в идеале бы его интегрировать как-то в текущий макрос RegReplace
Содержимое файла макроса обертки 1 действия EMMET с предварительно выделенным текстом
[
{
"args":
{
"panel_input": ".cat-list-row$$$*"
},
"command": "wrap_as_you_type"
}
]
« Последнее редактирование: Марта 15, 2016, 20:21:29 от TRUEMAKER »

Loac

  • Administrator
  • Hero Member
  • *
  • Сообщений: 612
На один хоткей можно повесить несколько команд. Однако, для этого нужно добавить плагин https://github.com/skuroda/ImprovedMacros

К сожалению, он недоступен через PackageControl (я не нашел), так что надо установить руками.
« Последнее редактирование: Марта 15, 2016, 19:50:46 от Loac »

TRUEMAKER

  • Newbie
  • *
  • Сообщений: 5
Получилось пока установить 2 эти  макроса на соседние хоткеи
{ "keys": ["ctrl+shift+alt+n"], "command": "run_macro_file", "args": {"file": "Packages/User/cat-list-rowSSS_selected.sublime-macro"} },
{ "keys": ["ctrl+shift+alt+m"], "command": "reg_replace", "args": {"replacements": ["DivCatListRow0","DivCatListRow1",]} }
« Последнее редактирование: Марта 15, 2016, 20:20:34 от TRUEMAKER »

TRUEMAKER

  • Newbie
  • *
  • Сообщений: 5
Может будет полезно кому

ПОЛУЧИЛОСЬ не путем добавления вызова общего макроса в RegReplace,
а НАОБОРОТ путем добавления вызова макроса RegReplace после выполнения основного.
Основной макрос обертки заранее выделенного и сразу 2 автозамены
[
{
"args":
{
"panel_input": ".cat-list-row$$$*"
},
"command": "wrap_as_you_type"
},
{
"command": "reg_replace", "args": {"replacements": ["DivCatListRow0","DivCatListRow1",]}
}
]

И хоткей на вызов этого всего одним разом

{ "keys": ["ctrl+shift+alt+n"], "command": "run_macro_file", "args": {"file": "Packages/User/cat-list-rowSSS_selected.sublime-macro"} }