如何在Vim中按UTF-8行进行排序?

6

我在Vim中有这些行:

a
c
b
e
é
f
g

当我执行:%sort命令时,会出现以下情况:
a
b
c
e
f
g
é

显然,“é”行不应该在最后,而应该在“e”行之后。有没有可能让Vim正确排序这些行呢?不使用字符的ASCCI键,而是使用实际字符。

我也尝试过使用:!sort(使用GNU sort工具),但结果相同。


1
这并不像你想的那么明显。确切的排序很大程度上取决于所在地区。我猜你使用的本地语言可能不是你想要使用的。在你的系统上,命令“locale”打印出什么? - Joachim Sauer
2个回答

5

:%sort:%!sort不一定以相同的方式工作。引用:help sort:

有关排序的详细信息取决于所使用的库函数。不能保证排序是“稳定的”或遵守当前的区域设置。你需要试一试。

另一方面,GNU sort根据当前的区域设置进行排序。引用man sort:

* 警告 * 环境指定的区域设置会影响排序顺序。设置LC_ALL=C以获得使用本地字节值的传统排序顺序。

在我的系统上(Ubuntu 9.10并临时设置为fr_CA.UTF-8),:%sort的排序方式类似于设置了CPOSIX,而:%!sort则根据法语区域设置进行排序。

我的猜测是,您最初尝试了:%sort:%!sort,并在类似于POSIX的区域设置下尝试了两种方法(得到了相同的结果),然后只是在使用:%sort的情况下尝试了不同的区域设置(总是返回类似于POSIX的顺序)。您能确认一下吗?


感谢您在区分:%sort:%!sort的本地化方面进行澄清。但是,即使将LC_ALL设置为fr_CA.UTF-8:%!sort命令仍然无法正确排序行。问题可能与Vim无关,因为在常规终端中对文件运行sort也无法正常工作。我使用的是Mac,这可能是问题所在。我会进一步调查。 - remi
很奇怪...你说得对,最好先关注GNU sort,因为问题似乎不是特定于vim的。我现在没有Mac的访问权限,所以无法帮助你,但我找到了这个:http://discussions.info.apple.com/thread.jspa?messageID=11129073 也许那个讨论与此相关。祝你好运! - Bolo

0
我使用:%!sort得到以下内容:
a
b
c
e
é
f
g

这就是应该发生的事情。看起来您的语言环境设置可能有问题。我不确定到底有什么错,但 FWIW,我有以下环境设置:LANG=en_GB.UTF-8


我也是。我使用的是Ubuntu 9.04和sort 6.10。 - Benjamin Oakes
很奇怪,我的 LANG=fr_CA.UTF-8LC_ALL=fr_CA.UTF-8 - remi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接