0

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

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

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

谢谢!

4

2 回答 2

3

这是一个vscode解决方案。您将需要一些宏扩展来连续运行多个命令。例如,我在这里使用多命令。见https://marketplace.visualstudio.com/items?itemName=ryuta46.multi-command

设置.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",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.createTextBlock" },
  "when": "editorTextFocus && !editorReadonly"
},

解释宏:

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

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

第 2 步:插入片段。

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

捕获组 2 将是由相等数量的 / 包围的文本(如果我们在我们所做的正则表达式转换之前添加了相等数量的 /)。正.*则表达式的最后是处理文本中的奇数/偶数个字符。

regex101 演示 - 中间 25 个字符

创建文本块的演示

有关将不同文本行填充为相等长度的类似问题,请参阅如何使用正则表达式替换和片段将行填充到特定长度。

于 2019-11-06T04:08:36.530 回答
0

这必须通过插件/扩展来完成,这在本地是不可能的。

于 2019-11-05T12:51:45.050 回答