vim排序单词按字母顺序忽略重音符号

时间:2016-09-19 16:42:56

标签: sorting vim accent-insensitive alphabetized

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

3 个答案:

答案 0 :(得分:0)

:help :sort的底部,有这样的说明:

  

有关排序的详细信息取决于所使用的库函数。 没有   保证排序服从当前的语言环境。你必须尝试一下。   Vim确实做了“稳定”的排序。

首先,确保您在法语区域设置中运行。这可以在Vim内部通过

完成
:lang fr_FR

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

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

:%! LANG=fr_FR sort ...

答案 1 :(得分:0)

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

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

:%!perl -CIO -MUnicode::Collate -e '$col = Unicode::Collate->new(level => 1); print for $col->sort(<>)'

答案 2 :(得分:0)

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

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

完成后,我剪切并粘贴修改过的&#34; term&#34;到原始行的头部并结束:&#34; unaccentedterm:accentedterm:definition&#34;。然后我运行vim:sort,然后设置一个快速的vim宏去除第一个术语,即unaccentedterm。

非常感谢所有为此提供帮助的人。