Отрывки кода VS - регулярное выражение нескольких операций - PullRequest
0 голосов
/ 16 января 2020

В течение дня я пытался заставить фрагменты работать с регулярными выражениями, но, похоже, я не могу обернуть голову вокруг способа сделать это.

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

  1. Сделать все строчными
  2. Изменить буквы «" »,« ø »и« å »на« ae »,« oe »и« aa » "
  3. Удалить специальные символы (чтобы символы были только az и 0-9)
  4. Измените пробелы на" _ "

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

Фрагмент будет выглядеть следующим образом:

\section{$1} \label{sec:${2:$1(after regex)}

Надеюсь, что имеет смысл вообще

Преобразование будет делать следующее

Ørne og Mus! -> oerne_og_mus

Это возможно в Textmate со следующим фрагментом

\section{${1:section name}}
\label{sec:${2:${1/(\w+)(\W+$)?|\W+/${1:?${1:/asciify/downcase}:_}/g}}}

Но это несовместимо с кодом VS. Можно ли это как-то изменить для работы с кодом VS?

Ответы [ 2 ]

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

Хорошо, так что я мог бы наконец найти решение, которое работает как фрагмент

"\\section{$1}",
"\\label{sec:${2:${1/(æ)|(ø)|(å)|(é)|( +)|[^A-Za-z0-9]/${1:+ae}${2:+oe}${3:+aa}${4:+e}${5:+_}/g}}}",

Только пару найденных мной проблем.

  1. Мне нужно вручную добавить в список буквы с акцентом, такие как é
  2. без нижнего регистра
  3. Если есть строка, скажем "! между пробелами.

У кого-нибудь есть идеи, как это можно изменить? Или где я могу найти хороший ресурс для этого типа регулярных выражений (я не смог его найти)

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

РЕДАКТИРОВАТЬ: попробуйте этот фрагмент:

"latex labels": {
  "prefix": "_ll",
  "body": [
      "\\section{$1}",
      "\\label{sec:${2:${1/(\\w*)((æ)|(ø)|(å)|(é)|(\\s+)|([^a-zA-Z0-9_ ]))/${1:/downcase}${3:+ae}${4:+oe}${5:+aa}${6:+e}${7:+_}/gi}}}",
    ],
    "description": "Transform to latex labels"
},

Если у вас есть больше символов Dani sh, вам придется добавить их по отдельности - vscode не поддерживает преобразование /asciify .


Предыдущий ответ:

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

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

  "multiCommand.commands": [

    {
      "command": "multiCommand.latexLabelTransform",
      "sequence": [
        "cursorHomeSelect",
        "editor.action.clipboardCopyAction",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/(æ)|(ø)|(å)/${1:+ae}${2:+oe}${3:+aa}/gi}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/(.*)/${1:/downcase}/}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/[^a-z0-9 ]//g}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "\\section {$CLIPBOARD} \\label{sec:${2:${TM_SELECTED_TEXT/\\s/_/g}}}"
          }
        }
      ]
    }
  ]

И некоторые привязки клавиш:

{
  "key": "alt+d",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.latexLabelTransform" }
},

Если вы начинаете с текста, например Ørne og Mus!, см. Следующую демонстрационную версию:

latex snippet transform


Преобразованная деталь выбирается, как показано в демонстрации. Курсор в конце текста перед запуском макроса. Я мог бы, возможно, заставить его работать, начиная с \section {yourTextHere}, если это будет необходимо.

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

Дайте мне знать, если это работает для вас.

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