【问题标题】:vim sort words alphabetically ignore accentsvim 按字母顺序排序单词忽略重音符号
【发布时间】:2017-01-27 10:25:13
【问题描述】:

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

【问题讨论】:

    标签: sorting vim accent-insensitive alphabetized


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        关于排序的细节取决于使用的库函数。 没有 保证排序遵循当前的语言环境。您必须尝试一下。 Vim 确实进行了“稳定”排序。

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

        :lang fr_FR
        

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

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

        :%! LANG=fr_FR sort ...
        

        【讨论】:

        • 我正在运行 Ubuntu 16.04。两个建议都没有奏效。 :lang fr_FR 将重音字符排序到排序结束。 GNU sort 显然没有控制重音字符的标志。我设置了 LANG 变量,再次没有运气。继续寻找解决方案。也许将不得不使用 C#???
        • 嗯,这对我有用,在 Ubuntu 14.04 中。 echo -e "ezerel\néfuese\neduquer\nébats" | sortébats eduquer éfuese ezerel;我什至不需要更改语言环境(并使用en_US.UTF-8)。 Vim 确实将所有e... 排序在é... 之前。
        • 从您的问题中不清楚...这些词都在不同的行中,对吗?排序(Vim 和命令行)是基于行的。
        • 每个单词单独一行。我粗略的解决方案是创建一个将重音转换为非重音并“复制”单词的宏。例如:“ébats”变成“ebats:ébats”,然后运行:sort,然后去掉“ebats:”对所有1200+ word:definition 行执行此操作。似乎有效。
        猜你喜欢
        • 2011-04-06
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多