繁体   English   中英

TextMate 变换以替换匹配重复组中的单个字符

[英]TextMate transform to replace single character in matched repetitive group

TL;DR 向我展示了一个通用的 vscode 片段,用于将“/home/me/projects/project/src/Commands/Interfaces/Whatever”转换为“Commands\Interfaces\Whatever”

大家好,我正在使用 Vscode 并试图找出文件目录的简单转换以插入 PHP 命名空间。 到目前为止,我无法为这个看似平凡的问题找到一个简单、通用的解决方案:

  • 有没有办法在片段中转换 TM_DIRECTORY 变量的一部分,以便每个正斜杠都变成反斜杠?

乍一看,这似乎很微不足道,对吧? 从...开始

${TM_DIRECTORY/\\//\\\\/}

然后从那里建立起来。 问题是,我只想捕获文件名的一部分,然后在捕获的组上转换斜杠,而不使用固定/最大数量的文件名组件(在这种情况下,有一个丑陋、冗长的解决方案)

以下是正确的方向吗? 如果是这样,什么替换字符串会导致组 $1 但斜杠恢复?

${TM_DIRECTORY/.*\\/src(\\/([^\\/]+))+$/??????/}

在此先感谢,一个可以接受的回答是“除非你放松你的要求,否则没有办法”,这更像是一个关于正则表达式力量的理论问题。

您可以使用

"${TM_DIRECTORY/^.*?[\\\\\\/]src[\\\\\\/]|([\\\\\\/])/${1:+\\\\}/g}"

请参阅正则表达式演示(在结果字符串的开头有一个额外的\ ,因为无法像 VS Code 中那样引入条件替换模式)。

详情

  • ^ - 字符串的开头
  • .*? - 除换行符之外的任何零个或多个字符,尽可能少
  • [\\\/] - /\字符
  • src - 您需要删除子目录的目录名称
  • [\\\/] - 一个/\字符
  • | - 或者
  • ([\\\/]) - 第 1 组:一个/\字符。

${1:+\\}替换意味着我们仅在第 1 组匹配发生时才替换为\

请注意,反斜杠需要加倍,最后的g替换所有出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM