如何在Visual Studio Code代码片段中提取当前文件的最后一级目录名?
从VS Code代码片段的TM_DIRECTORY提取最后一级文件夹名
我懂你遇到的坑了——本来想通过VS Code代码片段的变量转换,从TM_DIRECTORY的完整路径里抠出最后一个文件夹名,结果正则表达式直接被输出成文本了,对吧?问题出在转换语法的使用方式上,我给你捋清楚正确的写法:
正确的转换写法
VS Code的代码片段变量转换必须遵循${变量名/正则表达式/替换内容/标志}的格式,针对你的需求,直接用这个就行:
${TM_DIRECTORY/.*\\///}
拆解一下这个转换的逻辑
.*:匹配路径里从开头到最后一个斜杠的所有内容\\/:是转义后的路径斜杠(因为正则里/是转换语法的分隔符,必须用反斜杠转义才能匹配实际的路径分隔符)- 替换内容留空:把前面匹配到的部分全部删掉,剩下的就是最后一级文件夹的名称了
举个实际例子:如果TM_DIRECTORY的值是/Volumes/my-project-path/ParentFolder/MyFolder,用这个转换后就会得到MyFolder。
完整的代码片段示例
如果你要生成{folder: "MyFolder"}这样的代码,对应的JSON格式代码片段应该这么写(注意JSON里的反斜杠需要双重转义):
"Get Current Folder Name": { "prefix": "folderName", "body": [ "{folder: \"${TM_DIRECTORY/.*\\\\//}\"}" ], "description": "Insert the name of the current file's parent folder" }
兼容Windows和macOS/Linux的通用写法
如果你的代码需要跨系统兼容(Windows用反斜杠,macOS/Linux用正斜杠),可以把正则改成匹配两种分隔符:
${TM_DIRECTORY/.*[\\\\\\/]//}
这个正则会匹配最后一个/或者\及之前的所有内容,替换后同样能得到正确的文件夹名。
你之前失败的原因
大概率是没用到正确的${.../.../...}结构,比如直接写了$TM_DIRECTORY/.*\\///——这种写法会被VS Code当成普通字符串输出,而不是执行变量转换操作。
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

