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

rem*_*emi 5 unicode vim utf-8

我在Vim中有这些行:

a
c
b
e
é
f
g
Run Code Online (Sandbox Code Playgroud)

当我这样做时:%sort,我得到了这个:

a
b
c
e
f
g
é
Run Code Online (Sandbox Code Playgroud)

显然,"é"行不应该在最后,它应该在"e"行之后.是否可以让Vim正确排序这些行?不使用ASCCI键作为字符,而是使用实际字符.

我也试过:!sort(使用GNU sortutiliy),但我得到了相同的结果.

Bol*_*olo 5

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

有关排序的详细信息取决于所使用的库函数。不能保证排序是“稳定的”或遵守当前的语言环境。你将不得不尝试一下。

另一方面,GNU sort 根据当前语言环境进行排序。引用man sort

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

在我的系统(临时设置了 fr_CA.UTF-8 的 Ubuntu 9.10)上,:%sort按设置CPOSIX设置:%!sort排序,而根据法语区域设置排序。

我的猜测是,你已经开始尝试都:%sort:%!sort下一个类POSIX的语言环境(其产生相同的结果),然后继续与不同的区域设置您的实验使用:%sort唯一的(它总是返回POSIX样的顺序)。你能确认吗?


Tom*_*vic 0

我得到以下使用:%!sort

\n\n
a\nb\nc\ne\n\xc3\xa9\nf\ng\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是应该发生的事情。看来您的区域设置可能是罪魁祸首。我不确定到底出了什么问题,但是 FWIW,我有以下环境设置:LANG=en_GB.UTF-8

\n