求助:VS Code Open Selection任务如何处理含引号的选中路径?
解决VS Code任务中处理带引号选中路径的问题
我太懂这个困扰了——用「Expand Selection」选中href里的路径时,总会连带前后的引号一起选中,导致VS Code任务里的命令处理出错,明明终端里能搞定,放到任务里就卡壳对吧?别慌,咱们只需要在shell命令里加一步移除首尾引号的处理就能解决这个问题。
方案一:增强sed命令处理引号
直接在你现有的sed表达式里添加移除首尾单/双引号的规则,修改后的任务配置如下:
{ "type": "shell", "label": "Open Selection", "command": "myFile=`echo ${workspaceFolder}${selectedText} | sed 's/^[\"']//;s/[\"']$//;s/\\.css/\\.scss/g;s/\\.\\.//g;`;code $myFile", "problemMatcher": [] }
关键修改说明:
s/^["']//:移除字符串开头的单引号或双引号s/["']$//:移除字符串结尾的单引号或双引号- 原有的
.css转.scss、移除../的规则保持不变
这样不管你选中的是"/path/to/file.css"还是'/path/to/file.css',经过sed处理后都会变成纯路径,再拼接上${workspaceFolder}就能正确传递给code命令打开对应的scss文件了。
方案二:用Bash参数分步处理(更直观)
如果你觉得sed的正则有点绕,也可以用Bash的参数扩展来分步处理,可读性更强:
{ "type": "shell", "label": "Open Selection", "command": "myFile=\"${workspaceFolder}${selectedText}\"; myFile=\"${myFile//\\\"/}\"; myFile=\"${myFile//\\'/}\"; myFile=\"${myFile//\\.css/\\.scss}\"; myFile=\"${myFile//\\.\\./}\"; code \"$myFile\"", "problemMatcher": [] }
步骤分解:
- 先拼接工作区路径和选中的文本(带引号)
${myFile//\\\"/}:移除所有双引号(注意转义)${myFile//\\'/}:移除所有单引号- 替换
.css为.scss、移除../ - 最后用
code命令打开处理后的文件
这种方式每一步都很清晰,适合不太熟悉sed正则的同学。
你可以任选一种方案测试,只要执行「Expand Selection」后运行这个任务,就能正确打开对应的scss文件啦!
内容的提问来源于stack exchange,提问作者Dan Pouliot
相关产品推荐
相关产品推荐

