纯字母排序法(was:Emacs中奇怪的文件排序与我的语言环境有关)
我刚注意到。这真令人毛骨悚然。但这是我的截图。所以也许帮帮我吧 TL;博士 问题在下面 症状 (这是一个纯字母排序法(was:Emacs中奇怪的文件排序与我的语言环境有关),emacs,collation,locale,Emacs,Collation,Locale,我刚注意到。这真令人毛骨悚然。但这是我的截图。所以也许帮帮我吧 TL;博士 问题在下面 症状 (这是一个emacs-nw屏幕截图。是的,我的终端有6行高。这使屏幕截图更切题。语言环境是法语,这是意料之中的。它与英语没有什么不同,只要想象一下有一个“may”而不是«mai»,月份被大写并截断为三个字符) 如果您错过了它,它是dired模式,文件应该按名称排序(在modeline中这样说),但是array.c和array.h不在一起 恐慌 我在找array.c,光标在下面,哇,伙计,它在哪里?一分
emacs-nw
屏幕截图。是的,我的终端有6行高。这使屏幕截图更切题。语言环境是法语,这是意料之中的。它与英语没有什么不同,只要想象一下有一个“may”而不是«mai»,月份被大写并截断为三个字符)
如果您错过了它,它是dired
模式,文件应该按名称排序(在modeline中这样说),但是array.c
和array.h
不在一起
恐慌
我在找array.c
,光标在下面,哇,伙计,它在哪里?一分钟前它就在那里。然后我真的找到了。然后我检查模型线。如果我这么要求,我就去。然后我注意到它是用法语写的,他们再也听不懂了。用LC_ALL=C
拍摄一个新的屏幕截图
但这解决了问题
(是的,确实发生了。)
所以这是一个地区的事情
我的语言环境是fr\u fr.UTF-8
$ ls ar* | $ LC_ALL=C ls ar*
array.c | array.c
arrayfunc.c | array.h
arrayfunc.h | arrayfunc.c
array.h | arrayfunc.h
(这时我去掉了标签,开始怀疑是否有人真的认真遵守了)
看来这是正常的
我不想再进行神秘的shell调用了,但要点是:在我安装的29个语言环境中,除了三个以外,其他所有语言环境都使用“奇怪”的顺序。这三个是:C,C.UTF-8和POSIX
不用说,但提到它也没什么坏处:“奇怪”的顺序让我感到不安,但它有其自身的意义:在这个小样本集上,它像往常一样按字典顺序排序,只是忽略了句号。所以arrayc
arrayf
arrayh
问题:
为什么??为什么?为什么?除了C之外,其他语言环境都有,所以这是经过深思熟虑的。这是基于什么规则?某个委员会中是否有人竖立并宣判:“整理时不应遵守标点符号”?可能有一些合法的严肃文件,他们说这是完全正常的,这就是为什么,对吗
这是这么多年来我第一次注意到
当然,它也忽略了空间
奖励:这是gnu.org上的bash-4.3.30 tarball。为什么有些文件是0664,有些文件是0644?在评论中保留答案另外:我不是在问如何修复它。如果你没有注意到,我已经修好了,其实不需要修好。此外,这在任何地方都有重复。我要问的是原因。答案:Unicode联盟得出结论,不管“变量”字符如何,保证排序顺序比包含字符串中的每个字符更重要 详细信息:我相信你要寻找的答案在于: 如果我理解正确,标点符号(除其他外,如空格)在不同语言中是“可变的”,因此为了确保不同语言之间的排序顺序相同,“可变”字符在排序中的“权重”非常低;经常将权重解析为零,因此对排序没有任何影响 UTS确实表明可以根据用户自定义排序 不幸的是,大多数系统只是使用默认值,这导致只有少数排序规则定义赋予“变量”字符同等的权重;而且没有真正支持用户调整默认值,从而获得包含标点和空格的UTF-8排序,而不是排除 < >如果我正确地遵循理性,考虑分类名称。在许多文化和语言中,firstname总是在lastname之前给出,如果颠倒过来,则lastname通过标点符号与firstname分开。在其他文化中,情况正好相反
lastname, firstname
lastname firstname
及
为确保每个列表始终按相同顺序排序,将忽略标点符号。(在emacs init文件中设置env“LC\u COLLATE”“C”)
?还是不知道为什么会这样分类,尽管。。。
lastname, firstname
lastname firstname
firstname lastname
firstname, lastname