如何在Visual Studio代码片段中获取基础目录?

24

我正在尝试在Visual Studio Code的代码片段中获取文件的当前目录。

VSCode有一个变量: TM_DIRECTORY,它是完整路径

例如:

{folder: "$TM_DIRECTORY"}

将被替换为

{folder: "/Volumes/my-project-path/ParentFolder/MyFolder"}

但我只想要 MyFolder

通常,我们可以像文档中所示使用变量转换。Sublime Text也是同样的方式。但无论我尝试多少次,片段都只会输出整个正则表达式。

有人能用神奇的变量/转换来回答吗? :)

3个回答

43

好的,终于找到了。

${TM_DIRECTORY/^.+\\/(.*)$/$1/} 可以得到基础目录。

我没有理解的部分是目录分隔符 / 的 "双重转义" -> \\/


如何跳脫 \Volumes\my-project-path\ParentFolder\MyFolder? - pungggi
9
没关系,我也找到了:${TM_DIRECTORY/^.+\\\\(.*)$/$1/}。该表达式是用来从文件路径中提取最后一个斜杠后面的文本内容。 - pungggi
1
我不太明白 VSCode 代码段是怎么工作的,但它肯定与 regex101 有所区别。我尝试过 ${TM_DIRECTORY/(\\w+)$/$1/},但它根本不起作用,虽然我期望它会像这里 https://regex101.com/r/kc7oNF/1 一样获取字符串结尾前的最后一个单词。 - godblessstrawberry

12

这支持Windows和Unix操作系统:

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

8
我需要补充说明的是,在Windows中,上述代码将会打印整个目录。你需要用四个反斜杠代替正斜杠:
${TM_DIRECTORY/^.+\\\\(.*)$/$1/}

这种编程语言叫什么?我想了解它,以便自己使用。 - sayandcode
@sayandcode 我认为这只是纯JavaScript。它只是由于解析而转义字符串。 - Jose A
纯JS?我在Neovim中尝试使用这个片段,但根本不起作用。我以为它是某种正则表达式。你所说的纯JS是什么意思? - sayandcode
@sayandcode,你是在使用Linux/WSL还是Windows?那段代码只适用于Windows。 - Jose A
1
@sayandcode 对不起,这不是纯JavaScript。VSCode遵循TextMate语法 https://macromates.com/manual/en/snippets。您可以在此处了解更多信息:https://code.visualstudio.com/docs/editor/userdefinedsnippets - Jose A
非常感谢您的帮助!顺便说一下,我在使用Linux系统,有没有什么关键词我应该注意一下? - sayandcode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接