是否有 LC_COLLATE 在破折号之前对点进行排序?

psp*_*int 8 zsh sort wildcards locale

在我检查过的语言环境中Cen_US.UTF-8点 (".") 排在破折号 ("-") 之后。当我cd和完整目录说“som”时,则some-dir.gitsome.git. 我还列出了我的项目的主题,并且文件zdharma-256.themezdharma.theme. 对我来说,自然的顺序是首先完成较短的目录。

有没有LC_COLLATE我可以用来解决这个问题的?

也许这不是整理问题,而是在排序的第一遍忽略扩展的问题?是否有Zsh我可以使用的代码(通配标志等)?

jim*_*mij 6

不,没有这样的校对,至少不是标准的校对。

以下是您自己检查的方法:

  1. 首先准备一个文件(行Aaaa这里只是为了测试目的)

    cat >test <<\eof
    Aa
    aa
    some.git
    some-dir.git
    eof
    
    Run Code Online (Sandbox Code Playgroud)
  2. sort使用系统上所有可用的排序规则运行命令:

    for loc in $(locale -a); do
        echo "____${loc}____";
        LC_COLLATE="$loc" sort test;
    done > test_sorted
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在打开test_sorted你喜欢的编辑器,看到不同的区域来分类Aaaa不同,但个个都some-dir.git之前some.git。换句话说

    pcregrep -M 'some.git\nsome' test_sorted
    
    Run Code Online (Sandbox Code Playgroud)

    什么都不给。

之所以-出现在 before.源于 ascii 和 unicode 表(请参阅 参考资料man ascii)。连字符(技术上称为连字符减号)的十进制代码为 45 (U+002D),而点是 46 (U+002E)。

如果你足够绝望,你可以编写自己的语言环境,改变这种行为。最简单的方法是修改当前文件之一,您可以在/usr/share/i18n/locales/.