我想使用vim:sort来按字母顺序排列法语单词列表,并将重音单词(é)排序为unaccented(e)。法国词典以这种方式排列。例如,对列表“eduquerébats”进行排序会产生“ébatsedduquer”。但是,使用vim进行简单排序会产生第一个列表。有没有:我可以设置的排序标志来完成这个?
答案 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。
非常感谢所有为此提供帮助的人。