如何在不同长度的文本周围创建 // 的注释块
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
请参阅 以了解有关将不同文本行填充为相等长度的类似问题。
我很好奇,是否有办法在文本周围自动创建这些块?目前在 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
请参阅