Как заполнить строку до определенной длины с помощью регулярного выражения заменить - PullRequest
0 голосов
/ 03 июля 2019

Представьте себе этот сценарий

// ----------------------------------------------------------------------------
// firebase

// ----------------------------------------------------------------------------
// utils

Можно обрезать строки до определенной длины, используя, например, это регулярное выражение /(^.{20}).*$/$1/, которое даст

// -----------------
// firebase

// -----------------
// utils

Но что, если я захочу заполнить другие строки вместо набора длина, как это за один проход? Это возможно?

  • одно регулярное выражение только для правильной заливки, а не для обрезки
// -----------------
// firebase --------

// -----------------
// utils -----------

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

<Ч />

В конечном итоге я пытаюсь достичь фрагмента VSCode, который позволяет мне написать: My Section --
затем вызвать фрагмент, который преобразует вставленный текст в комментарий шириной 80 символов, содержащий

// My Section -----------------------------------------------------------------

https://code.visualstudio.com/docs/editor/userdefinedsnippets

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Я сомневаюсь, что вы можете сделать то, что вы хотите, за один шаг, без запуска некоторого кода.Но вы можете сделать это с помощью макроса, чтобы вы могли запускать несколько шагов одновременно.В этом примере я использую расширение макроса multi-command , но есть и другие расширения макроса.

В вашем файле settings.json:

"multiCommand.commands": [

 {
   "command": "multiCommand.pad--'s",
   "interval": 750,  // you don't need this, just for illustration

   "sequence": [              
     {
       "command": "type",  // add 80 -'s'
       "args": {
         "text": "--------------------------------------------------------------------------------"
       }
     },

     //select this wrapped line so the next snippet can use TM_SELECTED_TEXT
     "cursorHomeSelect",
     "cursorHomeSelect",

     {
       "command": "editor.action.insertSnippet",  // trim to first 80 characters
       "args": {
         "snippet": "${TM_SELECTED_TEXT/(.{80}).*/$1/g}",
       }
     }
   ]
 }
],

Изатем, какую бы привязку клавиш вы ни выбрали в keybindings.json

{
  "key": "ctrl+alt+-",
  "command": "multiCommand.pad--'s",
},

В демоверсии ниже я оставил interval только для того, чтобы вы могли видеть шаги, но вы можете это закомментировать.Кроме того, мой vscode настроен на перенос 80 символов.

Основная идея состоит в том, чтобы добавить слишком много дефисов - 80 - и затем выделить всю перенесенную строку и оставить только первые 80 символов, таким образом обрезая конечные дефисыдля заполнения до 80 символов в строке.

demo of macro padding with hyphens

0 голосов
/ 03 июля 2019

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

let str = `// ----------------------------------------------------------------------------
// firebase

// ----------------------------------------------------------------------------
// utils`

let final = str.replace(/^.*$/gm, (match)=>{
  return match.length === 0 ? match : match.length > 20 ? match.substr(0,20) : match + `-`.repeat(20-match.length)
})

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