Как создать блок комментария // вокруг текста разной длины - PullRequest
0 голосов
/ 05 ноября 2019

Мне интересно, есть ли способ автоматически создавать эти блоки вокруг текста? В настоящее время работаю в проектах VS / VSCode.

/////////////////////////////////////////////////////////
///////////////////// Demo Text /////////////////////////
/////////////////////////////////////////////////////////

Из-за разной длины текста это может сильно раздражать.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 ноября 2019

Вот решение vscode. Вам понадобится некоторое расширение макроса для запуска нескольких команд подряд. Здесь я использую мультикоманду например. См. https://marketplace.visualstudio.com/items?itemName=ryuta46.multi-command

settings.json:

{
  "command": "multiCommand.createTextBlock2",
  // "interval": 350,
  "sequence": [

    "cursorEnd",        
    "cursorHomeSelect",
    {
                 // pad with equal number of /'s before and after text

      "command": "editor.action.insertSnippet",
      "args": {
        "snippet": "////////////////////////////// $TM_SELECTED_TEXT //////////////////////////////"
      }
    },

    "cursorHomeSelect",
    {
      "command": "editor.action.insertSnippet", 
      "args": {
        "name": "Create a Text Block",
      }
    },
    "cursorDown"
  ]
},

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

"Create a Text Block": {
  "prefix": "tb",
  "body": [

    "/////////////////////////////////////////////////////////", 
    "${TM_SELECTED_TEXT/(.*)(.{57})(\\1).*/$2/g}",
    "/////////////////////////////////////////////////////////",    

  ],
  "description": "create a text block"
},

и привязка клавиш (keybindings.json)) для запуска макроса.

{ 
  "key": "alt+b",                             // whatever binding you wish
  "command": "multiCommand.createTextBlock",
  "when": "editorTextFocus && !editorReadonly"
},

Для объяснения макроса:

У вас было 57 / в каждой строке без текста, так что это то, что я использовал - выбрал некоторое количество.

Шаг 1 макроса: текст выделяется и дополняется в начале и конце текста большим количеством символов /. Должно быть равное количество символов / до и после текста для регулярного выражения, чтобы сделать его магию - я использовал около 30 или около того.

Шаг 2: Фрагмент вставлен.

Интересная часть . Оставьте средние 57 символов строки, содержащей текст с регулярным выражением (.*)(.{57})(\\1).*. \\1 - это обратная ссылка к тому, что было захвачено в первой группе захвата - поэтому группы захвата 1 и 3 будут одинаковой длины.

И группа захвата 2 будет нашим текстом, окруженным равным количеством символов / (если мы добавили и равным числом / перед преобразованием регулярного выражения, которое мы сделали). .* в самом конце регулярного выражения - для обработки нечетного / четного количества символов в тексте.

regex101 demo - средние 25 символов

demo of create a text block

И см. Как разметить строку до определенной длины с помощью регулярных выражений замены и фрагментов для аналогичного вопроса о заполнении разных строк текста равной длины.

0 голосов
/ 05 ноября 2019

Это должно быть сделано через плагин / расширение, изначально невозможно.

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