2010-04-21 46 views
5

我有这些线路中的Vim:如何在Vim中对UTF-8行进行排序?

a 
c 
b 
e 
é 
f 
g 

当我做:%sort,我得到这个:

a 
b 
c 
e 
f 
g 
é 

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

我也:!sort尝试(使用GNU sort utiliy),但我得到了相同的结果。

+1

这并不像你想象的那么明显。确切的顺序在很大程度上取决于语言环境。我的猜测是你使用的地方不是你想使用的地方。在您的系统上打印“locale”命令是什么? – 2010-04-21 13:29:54

+0

一切都是'fr_CA.UTF-8'。 – remi 2010-04-21 13:41:55

回答

0

我得到使用:%!sort如下:

a 
b 
c 
e 
é 
f 
g 

这是什么是应该发生的。这似乎是你的地区设置可能是责备。我不知道究竟是错的,但FWIW,我有以下环境设置:LANG=en_GB.UTF-8

+0

同样在这里。我使用'sort' 6.10在Ubuntu 9.04上。 – 2010-04-21 13:26:55

+0

这很奇怪,我有'LANG = fr_CA.UTF-8'和'LC_ALL = fr_CA.UTF-8'。 – remi 2010-04-21 13:31:43

3

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

有关排序的详细信息取决于使用的库函数 。有 不保证排序是“稳定” 或服从当前的区域设置。你会 必须尝试一下。

在另一方面,根据当前区域GNU排序排序。引述man sort

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

在我的系统(Ubuntu的9.10与fr_CA.UTF-8临时设置):%sort种种仿佛CPOSIX而根据法国的语言环境:%!sort各种设置。

我猜想,你最初尝试下一个类POSIX语言环境都:%sort:%!sort(其产生相同的结果),然后继续你的实验只使用:%sort不同的区域(它总是返回POSIX样定购)。你能证实吗?

+0

感谢您根据语言环境对':%sort'和':%!sort'进行说明。但是,即使将'LC_ALL'设置为'fr_CA.UTF-8',':%!sort'命令仍然会错误地对行进行排序。问题可能与Vim无关,因为在常规终端的文件上运行'sort'也无法正常工作。我在Mac上,这可能是问题所在。我会研究一下。 – remi 2010-04-21 23:04:43

+0

这很奇怪...你说得对,最好先把注意力放在GNU排序上,因为问题看起来并不是vim专有的。我现在无法访问Mac,因此我无法帮助您,但我找到了这个:http://discussions.info.apple.com/thread.jspa?messageID=11129073也许这个讨论是不知何故相关。祝你好运! – Bolo 2010-04-22 08:43:19