如何在不同长度的文本周围创建 // 的注释块

How to create a comment block of //'s around text of different lengths

我很好奇,是否有办法在文本周围自动创建这些块?目前在 VS / VSCode 项目中工作。

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

由于文本长度不同,这真的很烦人。

谢谢!

这必须通过 plugin/extension 完成,本机不可能。

这是一个 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).*//g}",
    "/////////////////////////////////////////////////////////",    

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

以及触发宏的快捷键 (keybindings.json)。

{
  "key": "alt+b",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.createTextBlock" },
  "when": "editorTextFocus && !editorReadonly"
},

宏解释:

每行有 57 个 /'s,没有任何文本,所以这就是我使用的 - 选择了一些数量。

宏的第 1 步:选择文本并在文本的开头和结尾处填充大量 /。正则表达式的文本前后必须有相同数量的 / 才能发挥其魔力 ​​- 我使用了大约 30 个左右。

第 2 步:插入代码段。

有趣的部分。将包含文本的行的 中间 57 个字符 保留为正则表达式 (.*)(.{57})(\1).*\1 是对第一个捕获组中捕获的任何内容的 反向引用 - 因此捕获组 1 和 3 的长度相同。

捕获组 2 将是我们的文本,周围有相等数量的 /(如果我们在我们执行的正则表达式转换之前添加了相等数量的 /)。正则表达式最后的 .* 用于处理文本中的 odd/even 个字符。

regex101 demo - middle 25 characters

请参阅 以了解有关将不同文本行填充为相等长度的类似问题。