Regex в VSCode: преобразование регистра в выводе - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь заменить структуру вроде этой:

testVars.bread.componentFlour
testVars.bread.componentWater

на что-то вроде этого:

testVars.dough.flour
testVars.dough.water

это происходит с несколькими именами переменных; Я хочу удалить компонент и преобразовать первую букву в нижний регистр, чтобы она соответствовала CamelCase.

Я пытался сопоставить testVars.bread.component(.), заменив его на testVars.dough.\l$1.

Согласно документации регулярных выражений , что должно конвертировать мой матч в нижнем регистре. Тем не менее, VSCode хочет вставить \l в виде текста.

Как мне заставить VSCode преобразовать мое совпадение в нижний регистр?

РЕДАКТИРОВАТЬ: для пояснения, это строго для реализации VSCode, а не сам вопрос о регулярных выражениях Соответствие этой группе в notepad ++ и замена на testVars.dough.\l\1 делает именно то, что я хочу.

1 Ответ

0 голосов
/ 20 января 2020

Хотя вы не можете заменить строчный идентификатор в vscode, у вас все еще есть некоторые опции.

  1. Используйте регулярное выражение типа (?<=testVars\.).*\.component(.*), чтобы testVars. не захватывалось - потому что Вы не хотите менять его регистр.

  2. Ctrl + Shift + L , чтобы выбрать все ваши совпадения ( тоже самое, что editor.action.selectHighlights).

  3. Ctrl + Shift + P , тип lower и триггер, который команда (или создайте привязку клавиш для этой несвязанной команды).

  4. Включите replaceAll


Чтобы ускорить это у вас есть два варианта. (1) Создайте макрос, который будет выполнять шаги 2, 3 и 4. Или (2) создайте фрагмент, который преобразует ваш выбор - эффективно выполняя шаги 3 и 4.

Фрагмент в ваших сочетаниях клавиш. json (отсутствует в файле фрагмента):

{ 
  "key": "alt+m",                          // choose some keybinding
  "command":  "editor.action.insertSnippet",
  "args": {
    "snippet": "${TM_SELECTED_TEXT/.*\\.component(.*)/dough.${1:/downcase}/}"
  },
},

, а затем Ctrl + Shift + L для выбора всех и alt + m для запуска вышеуказанного insertSnippet.

lowercase snippet


Макрос подход:

Используя некоторое расширение макроса, здесь multi-command , введите это в свои настройки. json:

"multiCommand.commands": [

  {
    "command": "multiCommand.findReplaceLowercase",
    "sequence": [
      "editor.action.selectHighlights", {
        "command": "editor.action.insertSnippet",
        "args": {
          "name": "replace and lowercase",
        }
      },
    ]
  }
]

и фрагмент, в одном из ваших файлов фрагментов:

"replace and lowercase": {   // this "label" is used in the macro
  "prefix": "for",
  "body": [

      "${TM_SELECTED_TEXT/.*\\.component(.*)/dough.${1:/downcase}/}"

      // "${TM_SELECTED_TEXT/(.*)/${1:/downcase}/}"  // to downcase all selected text

  ],
  "description": "replace selected text"
},

и связывание клавиш для запуска макроса:

{ 
  "key": "alt+m",        // choose some keybinding
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.findReplaceLowercase" },
}

demo of lowercase macro


В демоверсии я копирую регулярное выражение поиска в виджет поиска (или просто пишу его там, не имеет значения, как он туда попадает или где находится фокус), а затем нажимаю alt + m (связывание макросов) и все.

Очевидно, это выглядит Это большая работа, но вы можете продолжать повторное использование макроса и фрагмента , преобразовывая их в результат замены, который вы хотели бы получить в следующий раз. И там вы можете использовать /downcase, /upcase, /capitalize и /pascalcase все, что вы не можете использовать в поле замены виджетов поиска / поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...