vscode 无法打开两个几乎相同名称的文件夹,除了在Windows上通过SSH进行大写字母区分,

m4pnthwp  于 4个月前  发布在  Vscode
关注(0)|答案(9)|浏览(64)

VS Code 版本:1.56.0

操作系统版本:Windows_NT x64 10.0.18363

重现步骤:

  1. 在 Linux 机器上创建两个文件夹,名称为 testTest

  2. 首先从 Windows 机器通过 SSH 打开 Linux 机器上的文件夹 test

  3. 从 Windows 机器上打开另一个 VSCode 新窗口。尝试通过 SSH 连接到 Linux 机器,然后尝试在该 Linux 机器上打开第二个文件夹 Test。它只会重定向到第一个窗口。

我认为这个问题与原生 Windows 功能有关,因为 Windows 不区分大小写。

当所有扩展都禁用时,这个问题是否仍然发生?是的

2nc8po8w

2nc8po8w1#

当打开一个新窗口时,我们首先检查是否已经存在该URI的窗口。对于远程(无-file)URI,不区分大小写进行比较。
@bpasero 我们应该改变这个吗?

kupeojn6

kupeojn62#

@aeschli 我想这取决于远程文件系统的类型?但也许更有可能的是,用户连接到一个区分大小写的Linux操作系统,而不是其他任何操作系统。
但是,一个适当的修复方法是了解远程文件系统的类型,以便进行调用。

zaqlnxep

zaqlnxep3#

是的,我们不知道远程文件系统。但它很可能是Linux。如果它是Windows/Mac文件系统,而我们弄错了,用户会在同一文件夹下看到两个窗口。我认为这是可以接受的。
话虽如此,我不知道用户多久会遇到上面描述的情况(在Linux文件系统中,文件夹名为test和Test)

zzoitvuj

zzoitvuj4#

用户会为同一个文件夹获得两个窗口,只要工作区标识符不是100%相同的。代码如下:
vscode/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts
第349行
| | returncreateHash('md5').update(folderUri.toString()).digest('hex'); |
看起来如果大小写不同,它会产生不同的标识符。

hgc7kmma

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 有任何异议吗?换句话说,该方法将变为:

export const extUriBiasedIgnorePathCase = new ExtUri(uri => {
	// A file scheme resource is in the same platform as code, so ignore case for non linux platforms
	// Resource can be from another platform. Lowering the case as an hack. Should come from File system provider
	return uri.scheme === Schemas.file ? !isLinux : false;
});
5vf7fwbs

5vf7fwbs6#

@jrieken似乎是作者(9518e1d),如果不是本地方案,返回false是否有任何反对意见?换句话说,该方法将变为:
这是从@aeschli的utils中复制粘贴的。

b5lpy0ml

b5lpy0ml7#

@bpasero 是的,我认为这是正确的更改。
在您和Joh的重构中,extUriBiasedIgnorePathCase 应该只在非常少的地方使用,特别是在main中,我们不知道远程文件系统的属性。

falq053o

falq053o9#

刚刚在WSL Ubuntu上遇到了这个问题。我有两个同名的文件夹,只是大小写不同,如果我尝试用一个已经打开的文件夹去打开另一个,VS Code会将我重定向到已打开文件夹的窗口,而不是为另一个文件夹打开一个新窗口。

相关问题