Автозамена в Sublime (regex, grep)

Ivan @ 18 / 12 / 2019 @ Веб / Памятки / Программирование
( / / / )

Время чтения: ~ 6 мин.

Есть плагин reg_replace для Sublime, и он умеет выполнять замену всякого на всякое с использованием regexp, например. Он легко устанавливается через Package Control.

Например, мне надо было привести большой текст к определённому типовому состоянию, и я написал себе вот такой набор, который достаточно просто добавить в файл конфигурации этого плагина в блок «replacements»: {… перед последней закрывающей }, например (это файл формате JSON и он лежит вот тут C:\Users\юзернэйм\AppData\Roaming\Sublime Text 3\Packages\User\reg_replace_rules.sublime-settings):

  • upd 02/18/2020: обновил, немного исправил список.
"strong": {
    "find" : "^(([A-ЯA-Z].+):)", //слово с большой буквы в начале строки, заканчивая двоеточием
    "replace": "<strong>\\1</strong>",
    "greedy": true
},

"em": {
    "find" : "^(([а-яa-z].+):)", //слово с маленькой буквы в начале строки, заканчивая двоеточием
    "replace": "<em>\\1</em>",
    "greedy": true
},

"wrap1" : {
    "find" : " - ", //дефис
    "replace": "&nbsp;— ",
    "greedy": true,
},

"wrap2" : {
    "find" : " — ", //тире длинное
    "replace": "&nbsp;— ",
    "greedy": true,
},

"wrap21" : {
    "find" : "^— ", //тире длинное
    "replace": "—&nbsp;",
    "greedy": true,
},

 "wrap3" : {
    "find" : "(\\s([А-ЯA-Za-zа-я])\\.)\\s",  //однобуквенные с точкой
    "replace": " \\1&nbsp;",
    "greedy": true,
},
       
"wrap4" : {
    "find" : "\\s([А-ЯA-Za-zа-я0-9])(\\s)",  //однобуквенные
    "replace": " \\1&nbsp;",
    "greedy": true,
},
       
"wrap5" : {
    "find" : "(\\s([А-ЯA-Za-zа-я0-9][А-ЯA-Za-zа-я0-9])\\.)\\s", //двухбуквенные с точкой
    "replace": " \\1&nbsp;",
    "greedy": true,
},
       
"wrap6" : {
    "find" : "\\s([А-ЯA-Za-zа-я0-9][А-ЯA-Za-zа-я0-9])(\\s)",  //однобуквенные
    "replace": " \\1&nbsp;",
    "greedy": true,
},

"wrap7" : {
    "find" : "\\s(м|m[²-³])",  //отбивка единиц
    "replace": "&nbsp;\\1",
    "greedy": true,
},


"м2" : {
    "find" : "м2", 
    "replace": "м²",
    "greedy": true,
},
"м3" : {
    "find" : "м3", 
    "replace": "м³",
    "greedy": true,
},

Когда это добавили, нужно сделать возможным запуск этих команд в Sublime. Для этого дописываем вот такое в файл, где хранятся пользовательские команды Sublime (это тоже JSON, и он хранится вот тут C:\Users\юзернэйм\AppData\Roaming\Sublime Text 3\Packages\User\Default.sublime-commands):

[

    {
        "caption": "Reg Replace: 01 Format before semicolon",
        "command": "reg_replace",
        "args": {"replacements": ["strong", "em"]}
    },

    {
        "caption": "Reg Replace: 02 Wrap in nbsp",
        "command": "reg_replace",
        "args": {"replacements": ["wrap1", "wrap2", "wrap3", "wrap4", "wrap5", "wrap6", "wrap7"]}
    },

    {
        "caption": "Reg Replace: 03 м2м3",
        "command": "reg_replace",
        "args": {"replacements": ["м2", "м3"]}
    },
]

Запуск скрипта происходит через командную строку, на Ctrl+Shift+pregreplace

В результате, вот такой текст

моментально (почти) становится вот таким, например:

UPD:
Найти все в начале строки до пробела с цифрой (исключительно):

(^.+?(?=\s\d))

 


Может быть интересно:


Подпишитесь на нас в социальных сетях!

Instagram
VK
Facebook
YouTube!

Подпишитесь на обновления

* нажимая на кнопку «Подписаться», вы даете согласие на обработку своих персональных данных