Как преобразовать заполнитель сниппета из 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"
}

Введите свое слово и вызовите привязку клавиш. Использует мультикоманду расширения макроса .

Другие вопросы по тегам