VS Code 版本:1.56.0
操作系统版本:Windows_NT x64 10.0.18363
重现步骤:
在 Linux 机器上创建两个文件夹,名称为
test
和Test
。首先从 Windows 机器通过 SSH 打开 Linux 机器上的文件夹
test
。从 Windows 机器上打开另一个 VSCode 新窗口。尝试通过 SSH 连接到 Linux 机器,然后尝试在该 Linux 机器上打开第二个文件夹
Test
。它只会重定向到第一个窗口。
我认为这个问题与原生 Windows 功能有关,因为 Windows 不区分大小写。
当所有扩展都禁用时,这个问题是否仍然发生?是的
9条答案
按热度按时间2nc8po8w1#
当打开一个新窗口时,我们首先检查是否已经存在该URI的窗口。对于远程(无-
file
)URI,不区分大小写进行比较。@bpasero 我们应该改变这个吗?
kupeojn62#
@aeschli 我想这取决于远程文件系统的类型?但也许更有可能的是,用户连接到一个区分大小写的Linux操作系统,而不是其他任何操作系统。
但是,一个适当的修复方法是了解远程文件系统的类型,以便进行调用。
zaqlnxep3#
是的,我们不知道远程文件系统。但它很可能是Linux。如果它是Windows/Mac文件系统,而我们弄错了,用户会在同一文件夹下看到两个窗口。我认为这是可以接受的。
话虽如此,我不知道用户多久会遇到上面描述的情况(在Linux文件系统中,文件夹名为test和Test)
zzoitvuj4#
用户会为同一个文件夹获得两个窗口,只要工作区标识符不是100%相同的。代码如下:
vscode/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts
第349行
| | returncreateHash('md5').update(folderUri.toString()).digest('hex'); |
看起来如果大小写不同,它会产生不同的标识符。
hgc7kmma5#
我刚刚查看了我们用于比较路径的实用程序,它似乎是
extUriBiasedIgnorePathCase
:vscode/src/vs/base/common/resources.ts
第339行到第343行 in 6aec850
| | exportconstextUriBiasedIgnorePathCase=newExtUri(uri=>{ |
| | // 一个文件方案资源与代码位于相同的平台,因此对于非Linux平台忽略大小写 |
| | // 资源可能来自另一个平台。将其转换为小写作为解决方法。应该来自文件系统提供者 |
| | returnuri.scheme===Schemas.file ? !isLinux : true; |
| | }); |
这个已经处理了检查文件方案以进行特定于操作系统的处理。我觉得我们应该改变我们的假设,即远程URI始终区分大小写,更改应该在那里进行。@jrieken似乎是作者( 9518e1d ),如果不是本地方案,返回
false
有任何异议吗?换句话说,该方法将变为:5vf7fwbs6#
@jrieken似乎是作者(9518e1d),如果不是本地方案,返回false是否有任何反对意见?换句话说,该方法将变为:
这是从@aeschli的utils中复制粘贴的。
b5lpy0ml7#
@bpasero 是的,我认为这是正确的更改。
在您和Joh的重构中,
extUriBiasedIgnorePathCase
应该只在非常少的地方使用,特别是在main中,我们不知道远程文件系统的属性。jaxagkaj8#
👍 , 🚢 it
falq053o9#
刚刚在WSL Ubuntu上遇到了这个问题。我有两个同名的文件夹,只是大小写不同,如果我尝试用一个已经打开的文件夹去打开另一个,VS Code会将我重定向到已打开文件夹的窗口,而不是为另一个文件夹打开一个新窗口。