VS代码段将变量解释为字符串



我正在使用变量转换在VS代码中编写一个片段。我想用一个变量来替换某些文本中出现的模式(在本例中是复制到剪贴板上的文本(,该变量插入不带扩展名的文件名(例如:CurrentFileNameWithoutExtensions(。发生的情况是,模式被替换为字符串形式的变量名,而不是变量的值。

以下是片段:

"${CLIPBOARD/pattern/$TM_FILENAME_BASE/}"

输出是:";图案";变成"$TM_FILENAME_BASE">
正确的输出应该是:"图案";变成";CurrentFileNameWithoutExtensions";。

一个可能的解决方案是输出模式之前的所有剪贴板文本,然后输出变量,最后输出模式之后的所有剪贴板文字。如何做到这一点?

剪贴板文本示例:

Text that is before pattern in clipboard.
pattern
Text that is after pattern in clipboard.

该片段可以捕获所有文本,直到出现模式并输出:

Text that is before pattern in clipboard.

然后输出变量$TM_FILENAME_BASE:

CurrentFileNameWithoutExtensions

最后,它会输出模式后的文本:

Text that is after pattern in clipboard.

输出看起来像这样放在一起:

Text that is before pattern in clipboard.
CurrentFileNameWithoutExtensions
Text that is after pattern in clipboard.

如果总是有一个匹配的模式,那么这是有效的:

"pattern": {
"prefix": "_pt",
"body": [
"${CLIPBOARD/(.*[rn]*)((pattern)([rn]*))(.*)/$1/}$TM_FILENAME_BASE${CLIPBOARD/(.*[rn]*)((pattern)([rn]*))(.*)/$4$5/}"
],
"description": "clipboard pattern"
}

这将处理中任意数量的换行符

first text
pattern
second text

first text
pattern

second text

first textpatternsecond text

参见regex101演示

当然,正如rioV8所指出的,如果模式在文本中除了中间部分之外的某个地方也匹配,那就是一个问题。

分组捕获不同的零件,只输出您想要的组

如果pattern不是CLIPBOARD 的一部分,它也可以工作

"${CLIPBOARD/^((.*?)(pattern.*)|(.*))$/$2$4/}$TM_FILENAME_BASE${CLIPBOARD/^((.*?pattern)(.*)|(.*))$/$3/}"

相关内容

  • 没有找到相关文章

最新更新