← Блог · · Команда ConvertCaseHQ · 6 мин чтения

Смена регистра в VS Code: команды, сочетания клавиш и расширения

В VS Code есть семь встроенных команд для смены регистра: Transform to Uppercase, Lowercase, Title Case, Snake Case, Camel Case, Kebab Case и Pascal Case. Выделите текст, откройте палитру команд (Command Palette) по Ctrl+Shift+P (на Mac — Cmd+Shift+P), введите «transform» и выберите нужную. Ни у одной из них нет сочетания клавиш по умолчанию, так что если вы пользуетесь ими часто, назначьте свои в keybindings.json. Всё, что для этого нужно, ниже.

У команд есть несколько особенностей, которые стоит знать, прежде чем запускать их на целом файле. Поэтому сначала мы разберём, что каждая из них делает на самом деле, затем сочетания клавиш, а потом два приёма, закрывающие пробелы: замену по регулярному выражению и преобразования в сниппетах. Расширения мы оставили напоследок, потому что они могут вам и не понадобиться.

Встроенные команды смены регистра в VS Code

Список рос с годами. Если какой-то команды нет в палитре, проверьте свою версию в меню Help, About (на Mac — Code, About).

Название в Command PaletteID командыС версии
Transform to Uppercaseeditor.action.transformToUppercaseДавно
Transform to Lowercaseeditor.action.transformToLowercaseДавно
Transform to Title Caseeditor.action.transformToTitlecase1.34
Transform to Snake Caseeditor.action.transformToSnakecase1.53
Transform to Kebab Caseeditor.action.transformToKebabcase1.69
Transform to Camel Caseeditor.action.transformToCamelcase1.75
Transform to Pascal Caseeditor.action.transformToPascalcase1.88

Присмотритесь к ID: это transformToSnakecase со строчной c, а не transformToSnakeCase. Копируйте их в точности, когда пишете сочетания клавиш, иначе сочетание молча ничего не сделает.

Два свойства делают эти команды удобнее, чем кажется сначала. Если ничего не выделено, команда преобразует слово под курсором, так что можно щёлкнуть внутри userId и запустить Snake Case, ничего не выделяя. А при нескольких курсорах или выделениях каждое преобразуется отдельно.

Что на самом деле делает каждая команда

Команды делят слова по-разному, и это легко упустить. Вот что они выдают в текущих версиях (мы сверялись с исходным кодом VS Code):

ВводSnakeKebabCamelPascalTitle
hello worldhello worldhello worldhelloWorldHelloWorldHello World
userIDuser_iduser-iduserIDUserIDUserid
USER_IDuser_iduser-idUSERIDUserIdUser_Id
XMLHttpRequestxml_http_requestxml-http-requestXMLHttpRequestXMLHttpRequestXmlhttprequest

Закономерности, стоящие за этой таблицей:

  • Snake Case и Kebab Case делят слова только там, где меняется регистр. С аббревиатурами они справляются хорошо, но пробелы остаются пробелами, так что hello world лишь переводится в нижний регистр. Kebab Case ещё и превращает подчёркивания в дефисы, а Snake Case дефисы не трогает.
  • Camel Case и Pascal Case делят слова по пробелам, подчёркиваниям и дефисам и делают заглавной первую букву каждой части, но Camel Case не переводит остаток слова в нижний регистр. Поэтому USER_ID превращается в USERID. Pascal Case, напротив, нормализует слова из одних заглавных и даёт UserId. (Не уверены, какой из двух вариантов нужен вашему коду? Загляните в наше сравнение camelCase и PascalCase.)
  • Title Case делает заглавной первую букву каждого слова, в том числе коротких служебных, а всё остальное переводит в нижний регистр: the lord of the rings превращается в The Lord Of The Rings. Команда рассчитана на быстрые правки, а не на заголовки. С апострофами она обращается разумно: don't превращается в Don't.

Поэтому, чтобы превратить фразу вроде Shipping Address Line 2 в snake_case, запустите сначала Camel Case, потом Snake Case, и получится shipping_address_line2. Или вставьте её в наш конвертер регистра: он за один шаг делит текст по пробелам, знакам препинания и смене регистра, а ещё предлагает CONSTANT_CASE, которого в VS Code нет.

Добавляем сочетания клавиш в keybindings.json

Для одного-двух сочетаний хватит редактора Keyboard Shortcuts: нажмите Ctrl+K, затем Ctrl+S (на Mac — Cmd+K Cmd+S), найдите «transform», дважды щёлкните по команде и нажмите нужные клавиши. Для всего набора быстрее отредактировать файл. Выполните в палитре команд Preferences: Open Keyboard Shortcuts (JSON) и добавьте эти записи внутрь квадратных скобок:

{ "key": "ctrl+k shift+u", "command": "editor.action.transformToUppercase",  "when": "editorTextFocus" },
{ "key": "ctrl+k shift+l", "command": "editor.action.transformToLowercase",  "when": "editorTextFocus" },
{ "key": "ctrl+k shift+t", "command": "editor.action.transformToTitlecase",  "when": "editorTextFocus" },
{ "key": "ctrl+k shift+s", "command": "editor.action.transformToSnakecase",  "when": "editorTextFocus" },
{ "key": "ctrl+k shift+c", "command": "editor.action.transformToCamelcase",  "when": "editorTextFocus" },
{ "key": "ctrl+k shift+p", "command": "editor.action.transformToPascalcase", "when": "editorTextFocus" },
{ "key": "ctrl+k shift+k", "command": "editor.action.transformToKebabcase",  "when": "editorTextFocus" }

Это составные сочетания (chords): нажмите Ctrl+K, отпустите, затем нажмите Shift+U. Мы выбрали префикс Ctrl+K, потому что VS Code уже использует его для команд редактора, и ни одно из этих семи сочетаний не занято стандартной привязкой в текущих версиях. На Mac пишите cmd+k вместо ctrl+k. Не оставляйте там ctrl+k: в macOS он привязан к Delete All Right, и составное сочетание, начинающееся с него, будет мешать. Если какое-то сочетание вдруг перестало работать, скорее всего, те же клавиши заняло расширение; найдите их в редакторе Keyboard Shortcuts, чтобы выяснить, какое именно.

Замена по регулярному выражению со сменой регистра

Для правок по всему файлу или проекту используйте поиск и замену с регулярными выражениями. Откройте замену по Ctrl+H (на Mac — Cmd+Option+F), включите regex по Alt+R (Cmd+Option+R) и ставьте \u, \U, \l или \L перед группой. Если искать _([a-z]) и заменять на \U$1, то user_id превратится в userId. То же работает в Replace in Files (Ctrl+Shift+H или Cmd+Shift+H).

Одно отличие от sed и Perl сбивает многих: в VS Code каждая последовательность действует только на следующую группу, поэтому \U$1_$2 переводит $1 в верхний регистр, а $2 не трогает, и \E здесь нет. В нашей шпаргалке по смене регистра через регулярные выражения есть проверенные рецепты и сравнение с другими инструментами.

Преобразования в сниппетах: snake_case, который понимает пробелы

Сниппеты тоже умеют преобразовывать текст, и начиная с VS Code 1.108 среди их параметров формата есть /snakecase и /kebabcase в дополнение к более старым /upcase, /downcase, /capitalize, /camelcase и /pascalcase. Их snake_case работает по другим правилам, чем команда: он превращает пробелы и дефисы в подчёркивания. Привяжите его к клавише через editor.action.insertSnippet, и он заменит выделение:

{
  "key": "ctrl+k shift+n",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus && editorHasSelection",
  "args": { "snippet": "${TM_SELECTED_TEXT/(.*)/${1:/snakecase}/}" }
}

Выделите Shipping Address Line 2, нажмите клавиши, и получится shipping_address_line_2. Цена за это — аббревиатуры: эта версия превращает XMLHttpRequest в xmlhttp_request, тогда как встроенная команда справляется верно. К тому же она преобразует только первую строку многострочного выделения, потому что . не совпадает с переводами строк. Для kebab-варианта подставьте /kebabcase.

Расширения для всего остального

Встроенные команды не умеют CONSTANT_CASE, dot.case, path/case и инверсию регистра. Два популярных расширения это умеют:

  • change-case (издатель wmaurer) оборачивает JavaScript-библиотеку change-case. Добавляет команды camel, constant, dot, kebab, lower, lowerFirst, no, param, pascal, path, sentence, snake, swap, title, upper и upperFirst, а также палитру Change Case Commands, которая при выделенном одном слове показывает предпросмотр каждого результата.
  • Text Power Tools (автор Dániel Tar) — более широкий набор из более чем 240 текстовых команд. Смена регистра — лишь одна из его частей: camelCase, PascalCase, snake_case, CONSTANT_CASE, dash-case, dot.case и Title Case, а рядом — фильтрация строк, сортировка и числовые последовательности.

Наше мнение: если вам нужны только семь встроенных стилей, обойдитесь без расширения и просто назначьте клавиши. Если CONSTANT_CASE нужен каждый день, установите change-case: одна команда лучше, чем Snake Case с последующим Uppercase.

Краткий чек-лист настройки: убедитесь, что у вас версия 1.88 или новее, чтобы были все семь команд, вставьте семь привязок (с cmd+k на Mac), добавьте привязку сниппета, если часто преобразуете фразы, а для английских заголовков берите настоящий инструмент для «Регистра заголовка» (Title Case).