Как преобразовать заполнитель сниппета из CamelCase в snake_case
Я хотел бы создать фрагмент кода VS, в который я ввожу часть в
CamelCase
, и такая же строка выводится в
snake_case
в другом месте фрагмента.
На основе этого сообщения SO Вот мой примерный фрагмент, но у меня есть конечный
_
которые нужно удалить вручную, не идеально:
"test": {
"prefix": "test",
"body": "${1} -> ${1/([A-Z])+([a-z]+)/${1:/downcase}${2}_/g}"
},
1 ответ
"camelToSnakeCase": {
"prefix": "test",
"body": [
"${1} -> ${1/([A-Z][a-z]+$)|([A-Z][a-z]+)/${1:/downcase}${2:/downcase}${2:+_}/g}"
],
"description": "transform from CamelCase to snake_case"
}
Чтобы различать последнюю группу захвата, например
Abcd
и предыдущие группы захвата я использовал чередование:
([A-Z][a-z]+$)|([A-Z][a-z]+)
должен быть в этом порядке
поэтому группа 1 будет в конце ввода из-за
$
индикатор и группа 2 не будет в конце. А после группы 2 всегда будет по крайней мере еще одна группа. Затем, используя условную
${2:+_}
вставляйте подчеркивание только в том случае, если есть группа 2 - потому что должна быть следующая группа 1.
Эта версия с привязкой клавиш также работает, если у вас другой рабочий процесс:
{
"key": "alt+3", // whatever keybinding you wish
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"cursorWordLeftSelect",
"editor.action.transformToSnakecase",
"editor.action.transformToLowercase",
// "cursorLineEnd" // if you want this
]
},
"when": "editorTextFocus && !editorHasSelection"
}
Введите свое слово и вызовите привязку клавиш. Использует мультикоманду расширения макроса .