Next: , Previous: , Up: The Emacs Editor   [Contents][Index]


42 テキストのソート

Emacsは、バッファーのテキストをソートするためのコマンドをいくつか提供しています。これらはすべて、リージョンの内容にたいして処理を行ないます。これらのコマンドはリージョンのテキストを、多数のソートレコード(sort records)に分割し、各レコードをソートキー(sort key)で識別した後、ソートキーにより決定される順序にレコードを並び替えます。レコードは並び替えられ、レコードのキーはアルファベット順、または数値ソートでは数値順になります。アルファベット順のソートでは、ASCII文字順にしたがい、‘A’から‘Z’のすべての大文字は、小文字の‘a’の前になります。(しかし、以下で説明するsort-fold-caseはこれを変更する)。

種々のソートコマンドは、テキストをどのようにソートレコードに分割するか、そして各レコードのどの部分がソートキーとして使用されるかという点で異なります。ほとんどのコマンドは行ごとにソートレコードを分割しますが、ソートレコードとしてパラグラフやページを使うコマンドもあります。ほとんどのソートコマンドは、ソートレコード全体をソートキーとして使用しますが、レコードの一部をソートキーとして使用するものもあります。

M-x sort-lines

リージョンを行に分割して、行のテキスト全体を比較してソートします。数引数は降順でソートすることを意味します。

M-x sort-paragraphs

リージョンをパラグラフに分割して、パラグラフのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。

M-x sort-pages

リージョンをページに分割して、ページのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。

M-x sort-fields

リージョンを行に分割して、各行のあるフィールドの内容を比較することによりソートします。フィールドは空白で区切ることにより定義されるので、ある行の最初の連続する非空白文字がフィールド1を構成し、2番目のそのような文字構成がフィールド2、...となります。

どのフィールドでソートするかは数引数で指定します。1はフィールド1、2はフィールド2、...となります。デフォルトは1です。負の引数はフィールドを左からではなく右から数えることを意味します。したがって、-1は最後のフィールドでソートするという意味です。ソートされるフィールドの内容が同じ行が複数存在する場合、バッファーの元の並び順が維持されます。

M-x sort-numeric-fields

M-x sort-fieldsと同様ですが、各行の指定されたフィールドを整数に変換して、その数字を比較します。テキストとして比較したとき‘10’は‘2’の前になりますが、数字として比較すると‘2’の後になります。デフォルトでは、数字はsort-numeric-baseにより解釈されますが、‘0x’または‘0’で始まる数字は16進および8進で解釈されます。

M-x sort-columns

M-x sort-fieldsと同様ですが、各行で比較に使用されるテキストは固定長の列範囲です。プレフィクス引数を指定した場合は、逆順でソートします。このコマンドの詳細は以下を参照してください。

M-x reverse-region

リージョンの行を逆順にソートします。フィールドでソートするコマンドは降順でソートする機能がないので、フィールドまたは列で降順にソートできるのは便利です。

たとえば、以下のようなバッファー内容のとき:

On systems where clash detection (locking of files being edited) is
implemented, Emacs also checks the first time you modify a buffer
whether the file has changed on disk since it was last visited or
saved.  If it has, you are asked to confirm that you want to change
the buffer.

バッファー全体にM-x sort-linesを適用すると以下のようになります:

On systems where clash detection (locking of files being edited) is
implemented, Emacs also checks the first time you modify a buffer
saved.  If it has, you are asked to confirm that you want to change
the buffer.
whether the file has changed on disk since it was last visited or

大文字の‘O’はすべての小文字の前にソートされます。かわりにC-u 2 M-x sort-fieldsを使用すると、以下が得られます:

implemented, Emacs also checks the first time you modify a buffer
saved.  If it has, you are asked to confirm that you want to change
the buffer.
On systems where clash detection (locking of files being edited) is
whether the file has changed on disk since it was last visited or

ここで、ソートキーは‘Emacs’、‘If’、‘buffer’、‘systems’、‘the’です。

M-x sort-columnsは説明が必要でしょう。ある列にポイントを配し、別の列をマークして、ソート列を指定します。ソートしたいテキストの最初の行の先頭にポイントまたはマークを配すことはできないので、このコマンドは特殊な“リージョン”の定義を使用します。ポイントがある行はすべてリージョンの一部と判断されます。マークがある行もすべてリージョンの一部と判断されます。同様にその間にあるすべての行もリージョンの一部となります。

たとえば、10列目から15列目までの情報でテーブルをソートするには、テーブルの最初の行の10列目にマークを置き、最後の行の15列目にポイントを置いて、sort-columnsを実行します。最初の行の15列目にマークを置き、最後の行の10列目にポイントを置いても、同じように実行できます。

これはポイントとマークで指定された矩形領域をソートすると考えることができます。1つ違うのは、各行の矩形領域の左右にあるテキストも、矩形領域内のテキストとともに移動するという点です。矩形領域(Rectangles)を参照してください。

sort-fold-caseが非nilの場合、多くのソートコマンドは比較時の大文字小文字の違いを無視します。