blog/
Автозамена в Sublime (regex, grep)
Есть плагин 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": " — ",
"greedy": true,
},
"wrap2" : {
"find" : " — ", //тире длинное
"replace": " — ",
"greedy": true,
},
"wrap21" : {
"find" : "^— ", //тире длинное
"replace": "— ",
"greedy": true,
},
"wrap3" : {
"find" : "(\\s([А-ЯA-Za-zа-я])\\.)\\s", //однобуквенные с точкой
"replace": " \\1 ",
"greedy": true,
},
"wrap4" : {
"find" : "\\s([А-ЯA-Za-zа-я0-9])(\\s)", //однобуквенные
"replace": " \\1 ",
"greedy": true,
},
"wrap5" : {
"find" : "(\\s([А-ЯA-Za-zа-я0-9][А-ЯA-Za-zа-я0-9])\\.)\\s", //двухбуквенные с точкой
"replace": " \\1 ",
"greedy": true,
},
"wrap6" : {
"find" : "\\s([А-ЯA-Za-zа-я0-9][А-ЯA-Za-zа-я0-9])(\\s)", //однобуквенные
"replace": " \\1 ",
"greedy": true,
},
"wrap7" : {
"find" : "\\s(м|m[²-³])", //отбивка единиц
"replace": " \\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+p → regreplace

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

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

UPD:
Найти все в начале строки до пробела с цифрой (исключительно):
(^.+?(?=\s\d))
Может быть интересно:
- How to float divs with different height
- Копировать и отразить направляющие в InDesign
- Calculate inclination of a roof valley with Python
- Скрипт для выбора победителя в инстаграме (из лайков)
- Урок — Буквы от больших к маленьким в InDesign