如何在VS Code的keybindings.json的args内用正则提取文件名
解决方案
VSCode 快捷键的 sendSequence 命令参数本身不支持直接内嵌正则处理内置变量,你可以通过以下两种方式实现需求:
方案1:使用VSCode内置变量(推荐)
VSCode 原生提供了无需正则即可直接获取无后缀纯文件名的内置变量 ${fileBasenameNoExtension},直接替换原有配置的${file}即可:
{ "key": "ctrl+shift+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "'${fileBasenameNoExtension}'\u000D" } }
相关VSCode路径内置变量参考:
${file}:当前文件的完整绝对路径${fileBasename}:带后缀的完整文件名${fileExtname}:当前文件的后缀名${fileDirname}:当前文件所在的文件夹路径
方案2:借助终端正则处理
如果你有自定义正则匹配的特殊需求,需要用你给出的正则逻辑处理路径,可以把正则判断放到终端命令里执行,以下是不同终端的示例:
Bash/Zsh 环境示例
{ "key": "ctrl+shift+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "filename='${file}'; [[ $filename =~ ^(.+/)*(.+)\\.(.+)$ ]] && echo \"${BASH_REMATCH[2]}\"\u000D" } }
PowerShell 环境示例
{ "key": "ctrl+shift+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "$filename = '${file}'; if ($filename -match '^(.+\\\\)*(.+)\\.(.+)$') { $matches[2] }\u000D" } }
注意:Windows 路径的反斜杠需要双重转义,所以正则里的路径分隔符要写为
\\\\才能正常识别。
内容的提问来源于stack exchange,提问作者Yarden Orenshtein
相关产品推荐
相关产品推荐

