Ber*_*ler 8 visual-studio-code
我.txt在项目的子文件夹中有一些包含SQL代码的文件.我想要SQL语法高亮,所以我把它添加到我的工作区 文件夹设置:
{
"files.associations": {
"**/somefolder/*.txt": "sql"
}
}
Run Code Online (Sandbox Code Playgroud)
当文件夹名称前面有两颗星时,这种方法有效.但somefolder实际上是我项目根目录下的文件夹.
为什么我不能写像somefolder/**/*.txt?
小智 13
似乎这个新版本的 VSCode 要求您**在开始时使用 ,而不管:
{
"files.associations": {
"**/somefolder/**/*.txt": "sql"
}
}
Run Code Online (Sandbox Code Playgroud)
那应该工作
上下文:尝试回答@gremo的额外赏金问题:
这是由于full pathvsfilename基于 的存在的匹配行为/。VSCode文档中也隐晦地提到了同样的内容。请继续阅读以了解详细信息。
根据@gremo的要求,引用以下信誉良好的来源:
请注意,该模式是一个全局模式,如果它包含 /,则将在文件的完整路径上匹配,否则将在文件名上匹配。
仔细阅读,您会看到这个词full path of the file并file name脱颖而出!
即从上面我们可以推断,根据它的存在将决定vs/的匹配模式/行为!full path matchpartial/filename match
relative当我们看到路径还不允许时,这更有意义,正如@Bob_在他的答案中发布的问题 #12805 允许工作区相对 files.associations 设置中提到的。
为什么模式somefolder/*.txt不匹配?
因为有一个/in 模式,这将进行full path匹配
在我们的例子中,加载文件的完整路径将是:c:\scratch\VsCodePatternTest\somefolder\foo.txt和c:\scratch\VsCodePatternTest\foo.txt
所以我们本质上是试图将上面的full path模式匹配:somefolder/*.txt
结果:都不匹配!
注意:从技术上讲,这个路径永远不会匹配任何东西,因为Windows/Linux/Mac你不能有像上面这样的绝对路径..它需要以某种方式扎根:
E.g. on Windows:
c:/somefolder (or use `\\` for back slashes on windows)
on Linux/Mac:
/somefolder
Run Code Online (Sandbox Code Playgroud)
为什么要进行模式**/somefolder/*.txt匹配?
现在再次因为有一个/in 模式,这将进行full path匹配
再次像上面一样,加载文件的完整路径将是:c:\scratch\VsCodePatternTest\somefolder\foo.txt和c:\scratch\VsCodePatternTest\foo.txt
所以我们本质上是试图将上面的full path模式匹配:**/somefolder/*.txt
结果:只有一个文件匹配!
额外奖励:为什么要进行模式foo.txt匹配?
现在,由于模式中没有 ,这将进行匹配/filename
再次像上面一样,加载文件的完整路径将是:c:\scratch\VsCodePatternTest\somefolder\foo.txt和c:\scratch\VsCodePatternTest\foo.txt
所以我们本质上是在尝试匹配上面的filenameiefoo.txt和foo.txt模式:foo.txt
结果:两个文件匹配!
版本/操作系统:
VSCode 1.78.1 on Windows 10 x64
Run Code Online (Sandbox Code Playgroud)
项目/工作区结构:
c:\scratch\VsCodePatternTest
\.vscode
settings.json
\foo.txt
\somefolder
\foo.txt
Run Code Online (Sandbox Code Playgroud)
希望这能解决问题!
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |