0

我想使用 vim :sort 按字母顺序排列法语单词列表,并排序将重音单词 (é) 视为非重音单词 (e)。法语词典就是按照这种方式排列的。例如,对列表“eduquer ébats”进行排序会产生“ébats eduquer”。但是,使用 vim 的简单排序会产生第一个列表。我可以设置一个 :sort 标志来完成此操作吗?

4

3 回答 3

0

您可以尝试使用Unicode::Collateperl 中的模块进行排序。它是一个 perl 核心模块。

假设您的单词列表是用 utf8 编写的:

:%!perl -CIO -MUnicode::Collate -e '$col = Unicode::Collate->new(level => 1); print for $col->sort(<>)'
于 2016-09-20T15:23:32.153 回答
0

显然,没有直接的 vim 排序方法来完成我想要的。我的解决方法是如上所述设置 2 个宏。

回顾一下:我的文本文件的每一行都包含法语“术语:定义”。某些术语包含重音字符。为了使行按字母顺序排列,以便将重音字母视为不重音,我编写了一个宏来复制“术语”,打开一个新行,将“术语”粘贴到该单独的行上,然后调用一个转换重音字符的宏在粘贴的“术语”中不重音,例如,let @m=':s/^Vu00e0/a/ge'; 我的宏是一个长字符串,用于搜索法语中的所有重音字符。

完成后,我将修改后的“术语”剪切并粘贴到原始行的开头,最后是:“unaccentedterm:accentedterm:definition”。然后我运行 vim :sort,然后设置一个快速的 vim 宏来去除第一个术语,即 unaccentedterm。

非常感谢所有跳过它来提供帮助的人。

于 2016-09-20T19:43:02.197 回答
0

在底部:help :sort,有这样的注释:

关于排序的细节取决于使用的库函数。 不能保证排序遵循当前的语言环境。您将不得不尝试一下。 Vim 确实做了一个“稳定”的排序。

首先,确保您在法语语言环境中运行。这可以在 Vim 中通过

:lang fr_FR

LANG在 shell 中设置环境变量可能会更好(假设 Linux;在 Windows 上,您可能需要相应地设置用户的语言)。

如果这不起作用,您可以退回到外部sort(通常在 Linux 上提供,您也可以在此处下载 GNU 排序的 Windows 端口)。通过 Vim 排序

:%! LANG=fr_FR sort ...
于 2016-09-19T17:02:50.827 回答