我在Vim中有这些行:
a
c
b
e
é
f
g
当我执行
:%sort
命令时,会出现以下情况:a
b
c
e
f
g
é
显然,“é”行不应该在最后,而应该在“e”行之后。有没有可能让Vim正确排序这些行呢?不使用字符的ASCCI键,而是使用实际字符。
我也尝试过使用:!sort
(使用GNU sort
工具),但结果相同。
:%sort
和:%!sort
不一定以相同的方式工作。引用:help sort
:
有关排序的详细信息取决于所使用的库函数。不能保证排序是“稳定的”或遵守当前的区域设置。你需要试一试。
另一方面,GNU sort根据当前的区域设置进行排序。引用man sort
:
* 警告 * 环境指定的区域设置会影响排序顺序。设置LC_ALL=C以获得使用本地字节值的传统排序顺序。
在我的系统上(Ubuntu 9.10并临时设置为fr_CA.UTF-8),:%sort
的排序方式类似于设置了C
或POSIX
,而:%!sort
则根据法语区域设置进行排序。
我的猜测是,您最初尝试了:%sort
和:%!sort
,并在类似于POSIX的区域设置下尝试了两种方法(得到了相同的结果),然后只是在使用:%sort
的情况下尝试了不同的区域设置(总是返回类似于POSIX的顺序)。您能确认一下吗?
:%sort
和:%!sort
的本地化方面进行澄清。但是,即使将LC_ALL
设置为fr_CA.UTF-8
,:%!sort
命令仍然无法正确排序行。问题可能与Vim无关,因为在常规终端中对文件运行sort
也无法正常工作。我使用的是Mac,这可能是问题所在。我会进一步调查。 - remi:%!sort
得到以下内容:a
b
c
e
é
f
g
这就是应该发生的事情。看起来您的语言环境设置可能有问题。我不确定到底有什么错,但 FWIW,我有以下环境设置:LANG=en_GB.UTF-8
sort
6.10。 - Benjamin OakesLANG=fr_CA.UTF-8
和 LC_ALL=fr_CA.UTF-8
。 - remi