vim :sort を使用して、フランス語の単語のリストをアルファベット順に並べ替え、アクセント付きの単語 (é) をアクセントなし (e) と見なしたいと考えています。フランス語の辞書はこのように配置されています。たとえば、リスト「eduquer ébats」をソートすると、「ébats eduquer」が生成されます。ただし、vim を使用した単純な並べ替えでは、最初のリストが生成されます。これを達成するために設定できる :sort フラグはありますか?
3 に答える
の下部に:help :sort
、次のメモがあります。
ソートの詳細は、使用するライブラリ関数によって異なります。 並べ替えが現在のロケールに従うという保証はありません。あなたはそれを試してみる必要があります。 Vim は「安定した」ソートを行います。
まず、フランス語のロケールで実行していることを確認してください。これは、Vim 内で次の方法で実行できます。
:lang fr_FR
ただし、シェルで環境変数を設定する方がおそらくさらに良いでしょうLANG
(Linux を想定しています。Windows では、おそらくそれに応じてユーザーの言語を設定する必要があります)。
それが機能しない場合は、外部にフォールバックできますsort
(Linux では一般的に提供されています。ここから GNU ソートの Windows ポートをダウンロードすることもできます)。経由で Vim から並べ替える
:%! LANG=fr_FR sort ...
Unicode::Collate
perl のモジュールで並べ替えを試すことができます。これは perl コア モジュールです。
単語リストが utf8 で書かれているとします。
:%!perl -CIO -MUnicode::Collate -e '$col = Unicode::Collate->new(level => 1); print for $col->sort(<>)'
どうやら、私が望むことを達成するための直接のvimソート方法はありません。私の回避策は、上記のように 2 つのマクロを設定することです。
要約すると、テキスト ファイルの各行には、フランス語の「term : definition」が含まれています。一部の用語には、アクセント付きの文字が含まれています。アクセント付きの文字がアクセントなしとして扱われるように行をアルファベット順に並べ替えるために、「用語」をコピーして新しい行を開き、その別の行に「用語」を貼り付けてから、アクセント付きの文字を変換するマクロを呼び出すマクロを作成しました。貼り付けられた「用語」のアクセントを外します。たとえば、let @m=':s/^Vu00e0/a/ge'; 私のマクロは、フランス語のすべてのアクセント付き文字を検索する長い文字列です。
それが完了したら、変更した「用語」を切り取り、元の行の先頭に貼り付けて、「unaccentedterm:accentedterm:definition」で終了します。次に、vim :sort を実行し、簡単な vim マクロをセットアップして、最初の用語である unaccentedterm を取り除きます。
ジャンプして助けてくれたすべての人に感謝します。