TextMate 转换以替换匹配的重复组中的单个字符
TextMate transform to replace single character in matched repetitive group
长话短说;博士
给我一个通用的 vscode 片段,将“/home/me/projects/project/src/Commands/Interfaces/Whatever”转换为“Commands\Interfaces\Whatever”
大家好,
我正在使用 Vscode 并试图弄清楚文件目录的简单转换以插入 PHP 命名空间。
到目前为止,我还想不出一个简单的通用解决方案来解决这个看似平凡的问题:
- 有没有办法在片段中转换 TM_DIRECTORY 变量的 PART,以便每个正斜杠都变成反斜杠?
乍一看这似乎很微不足道,对吧?从
开始
${TM_DIRECTORY/\//\\/}
然后从那里开始。问题是,我只想捕获部分文件名,然后在捕获的组上转换斜线,而不求助于 fixed/maximum 数量的文件名组件(在这种情况下,有一个丑陋、冗长的解决方案)
以下方向是否正确?如果是这样,替换字符串会导致什么
组 $1 但斜杠已还原?
${TM_DIRECTORY/.*\/src(\/([^\/]+))+$/??????/}
提前致谢,可接受的回答是“除非您放宽要求,否则没有办法”,这更多是关于正则表达式功能的理论问题。
编辑:
感谢@WiktorStribiżew 找到了最简单的解决方案,在我发布问题后,我想出了一个比他复杂得多的表达式:
${TM_DIRECTORY/(([^\/]+)\/?(?=.*\/src\/))|(\/src\/)|((?<=\/src\/.*)\/?([^\/]+))/${5:+\\}/g}
您可以使用
"${TM_DIRECTORY/^.*?[\\\/]src[\\\/]|([\\\/])/${1:+\\}/g}"
请参阅 regex demo(在结果字符串的开头有一个额外的 \
,因为无法像在 VS Code 中那样引入条件替换模式)。
详情:
^
- 字符串开头
.*?
- 除换行字符外的任何零个或多个字符,尽可能少
[\\/]
- /
或 \
char
src
- 需要删除子目录的目录名称
[\\/]
- 一个 /
或 \
字符
|
- 或
([\\/])
- 第 1 组:一个 /
或 \
字符。
${1:+\}
替换意味着我们仅在第 1 组比赛发生时用 \
替换。
注意反斜杠需要加倍,末尾的 g
会替换所有出现的地方。
长话短说;博士 给我一个通用的 vscode 片段,将“/home/me/projects/project/src/Commands/Interfaces/Whatever”转换为“Commands\Interfaces\Whatever”
大家好, 我正在使用 Vscode 并试图弄清楚文件目录的简单转换以插入 PHP 命名空间。 到目前为止,我还想不出一个简单的通用解决方案来解决这个看似平凡的问题:
- 有没有办法在片段中转换 TM_DIRECTORY 变量的 PART,以便每个正斜杠都变成反斜杠?
乍一看这似乎很微不足道,对吧?从
开始${TM_DIRECTORY/\//\\/}
然后从那里开始。问题是,我只想捕获部分文件名,然后在捕获的组上转换斜线,而不求助于 fixed/maximum 数量的文件名组件(在这种情况下,有一个丑陋、冗长的解决方案)
以下方向是否正确?如果是这样,替换字符串会导致什么 组 $1 但斜杠已还原?
${TM_DIRECTORY/.*\/src(\/([^\/]+))+$/??????/}
提前致谢,可接受的回答是“除非您放宽要求,否则没有办法”,这更多是关于正则表达式功能的理论问题。
编辑:
感谢@WiktorStribiżew 找到了最简单的解决方案,在我发布问题后,我想出了一个比他复杂得多的表达式:
${TM_DIRECTORY/(([^\/]+)\/?(?=.*\/src\/))|(\/src\/)|((?<=\/src\/.*)\/?([^\/]+))/${5:+\\}/g}
您可以使用
"${TM_DIRECTORY/^.*?[\\\/]src[\\\/]|([\\\/])/${1:+\\}/g}"
请参阅 regex demo(在结果字符串的开头有一个额外的 \
,因为无法像在 VS Code 中那样引入条件替换模式)。
详情:
^
- 字符串开头.*?
- 除换行字符外的任何零个或多个字符,尽可能少[\\/]
-/
或\
charsrc
- 需要删除子目录的目录名称[\\/]
- 一个/
或\
字符|
- 或([\\/])
- 第 1 组:一个/
或\
字符。
${1:+\}
替换意味着我们仅在第 1 组比赛发生时用 \
替换。
注意反斜杠需要加倍,末尾的 g
会替换所有出现的地方。