Фрагменты VSCode - как запустить преобразование регулярного выражения в результате выбора? - PullRequest
0 голосов
/ 04 мая 2020

В этом фрагменте, определенном в keybindings.json Я пытаюсь запустить преобразование регулярного выражения для входного результата из диалога choice - мне нужно дважды вставить одно и то же значение, в 1-й позиции мне нужна часть перед первая точка с запятой и во 2-й позиции я хочу полный выбор значения.

Я пробовал примеры из do c, но, похоже, они не работают с choice, или я что-то упустил? Как мне этого добиться?

{
    "key": "cmd+alt+ctrl+t",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "Before semicolon: ${2/(\\w);{1,}/$1/} & Full value: ${2|1; testValue1, 2; testValue2|}"
    }
},

Ожидаемый результат:

BeforeSemicolon: 1 & Full value: 1; testValue1

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Преобразование переменных выбора не поддерживается. Существует общее обсуждение, упоминающее это в https://github.com/Microsoft/vscode/pull/51621.

Есть несколько обходных путей, потому что преобразователи заполнителей работают, пока где-то используется одно преобразованное использование заполнителя во фрагменте. Тогда преобразованная версия в другом месте будет работать. Этот метод работает для преобразований заполнителей, но НЕ преобразований выбора, как вы пытаетесь это сделать. Почему эта разница, я не знаю ??

Упрощенный обходной путь 1 с использованием одного заполнителя:

"snippet": "Before semicolon: ${1/([^;]*).*/$1/} && Full value: ${1:1; testValue1}"

Здесь вам придется принять значение заполнителя по умолчанию (1; testValue1) или перезаписать его с другим значением. Затем на tab преобразование будет применено к любым другим ссылкам на эту же табуляцию.

Сложный обходной путь 2, использующий несколько заполнителей (в данном случае для 3 «вариантов выбора»:

"snippet": "Before semicolon: ${1/([^;]*).*/$1/}${2/([^;]*).*/$1/}${3/([^;]*).*/$1/} && Full value: ${1:1; testValue}${2:2; testValue}${3:3; testValue}"

Здесь вы должны указать три (или сколько у вас есть) варианта как отдельные вкладки-заполнители. Затем вы либо вкладка примете тот заполнитель, который вам нужен, либо удалите tab те, которые вы не делаете. Немного сложно получить последовательность удаления / вкладки вниз, но как только она у вас есть, она повторяется. Вы видите, что курсор находится в начале следующего «выбора» но это действительно конец предыдущего «выбора».

Вот демонстрационная версия версии 2, где я выбираю каждый «выбор» / заполнитель по очереди. [Я просто использую alt i здесь, чтобы упростить связывание клавиш.]


Очевидно, если потенциально есть много "вариантов выбора" вы, вероятно, захотите использовать версию 1. Если у вас есть небольшое число из «вариантов», которые вы хотите представить и не нужно вводить, версия 2 работает довольно хорошо.

1 голос
/ 04 мая 2020

После некоторых экспериментов я нашел частичную работу.

Важно, чтобы регулярное выражение соответствовало всей строке. Поэтому добавьте .* в конце.

(это следует добавить в документацию)

{
    "key": "cmd+alt+ctrl+t",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "Before semicolon: ${1/([^;]*).*/$1/} && Full value: ${1|123; testValue1,223; testValue2|}"    }
},

И это работает только для первого выбора, AND you необходимо переместить курсор в текст опции, достаточно 1 Стрелка влево , выбор будет принят, но поле будет активным. А потом TAB . Теперь преобразование применяется.

Вы должны сообщить об ошибке для этого.

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