如何关闭 git bash 的 Windows 不区分大小写行为?

如何关闭 git bash 的 Windows 不区分大小写行为?

我用Windows 上的 Git Bash用于超出 Git 使用范围的众多 bash 任务。多年来它运行良好,但我无法改变不区分大小写的行为。这种方式自动完成很麻烦。

我尝试了旗帜

shopt -u nocasematch

.bashrc所描述的在解决方案#3中但这并不能解决问题。

解决方案 #1 或 #2 都不是我正在寻找的选项,因为我有大写的别名、混合大小写的目录和一些全小写的文件,并且应用案例映射的情况太多。

有没有办法在我的非默认 Linux shell 中启用区分大小写的自动完成功能?

由于它的口味不同,我希望得到一些提示或建议。

答案1

您需要恢复两个设置,nocaseglob并且nocasematch

文档 ( man bash) 写道,

nocaseglob如果设置,则bash在执行路径名扩展时以不区分大小写的方式匹配文件名 [...]

nocasematch 如果设置,则在执行或条件命令时执行匹配、执行模式替换字扩展或过滤可能的完成作为可编程完成的一部分时,bash以不区分大小写的方式匹配模式。case[[

对于我的 Cygwin 环境,这些都已设置off(尽管可以说两者都应该on用于以 Windows 为中心的 NTFS 文件系统的使用,该系统需要可记住大小写但不区分大小写*):

shopt | grep case
nocaseglob      off
nocasematch     off

如果在您的环境中设置了这些on并且您希望禁用它们(以便区分大小写进行比较),您可能需要尝试此命令

shopt -u nocasematch nocaseglob

但我应该指出,这可能行不通。安装在基于 Linux 的操作系统上的 NTFS 文件系统区分大小写(我可以创建和访问AbcaBC、 和abc作为单独的文件)。 Windows 系统上的同一文件系统被视为不区分大小写,并且只能从文件资源管理器或 Cygwin 访问这三个文件中的一个(尝试打开这三个文件中的任何一个仅返回“第一个”文件)。我怀疑这种详细程度超出了您的要求,但我只是添加它以防万一有用。

附加信息来自 Cygwin,其中我没有测试过因为它似乎强制执行与您想要的相反的配置:

区分大小写的文件名 在 Win32 子系统中,文件名仅保留大小写,但不区分大小写。您无法访问同一目录中仅大小写不同的两个文件,例如 Abc 和 aBc。虽然 NTFS(和一些远程文件系统)支持区分大小写,但 NT 内核默认情况下不支持它。相反,您必须调整注册表设置并重新启动。因此,Cygwin 不支持区分大小写,除非您更改该注册表值。

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive 如果您确实希望 Cygwin 区分大小写,可以通过将注册表值设置为 0 并重新启动计算机来打开它。

作为一个不同的角度,西格文基于区分大小写的自动完成。如果我有一个目录Downloads和一个目录dances,那么ls -d DTab只提供一个目录,我认为这是您想要的行为。如果您不是绝对热衷于 Git bash,您可能想尝试使用 Cygwin 及其git软件包。


* NTFS 本身区分大小写。然而,当在 Windows 环境中使用时,它似乎可以记住大小写,但不区分大小写,所以这就是我们必须处理的问题。

相关内容