GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Sorting.html ・ emacs-doc.conao3.com

43 テキストの並べ替え

Emacsには、バッファ内のテキストをソートするためのコマンドがいくつか用意されています。これらはすべてリージョンの内容に対して動作します。リージョンのテキストを多数のソートレコードに分割し、各レコードのソートキーを特定した上で、ソートキーによって決定される順序にレコードを並べ替えます。レコードは、キーがアルファベット順、あるいは数値ソートの場合は数値順になるように並べられます。アルファベット順のソートでは、ASCII文字シーケンスに従い、大文字の‘A’から‘Z’までがすべて小文字の‘a’より前に配置されます(ただし、後述するsort-fold-caseによってこの順序が変わる場合があります)。

各種ソートコマンドは、テキストをソートレコードにどのように分割するか、また各レコードのどの部分をソートキーとして使用するかという点で異なります。ほとんどのコマンドは各行を個別のソートレコードとしますが、一部のコマンドでは段落やページをソートレコードとして使用します。ほとんどのソートコマンドは、ソートレコード全体をソートキーとして使用しますが、一部のコマンドではレコードの一部のみをソートキーとして使用します。

M-x sort-lines

領域を行に分割し、各行の全文を比較してソートします。数値引数を指定すると、降順にソートされます。

M-x sort-paragraphs

領域を段落ごとに分割し、各段落の全文(先頭の空行を除く)を比較してソートします。数値引数を指定すると、降順にソートされます。

M-x sort-pages

領域をページごとに分割し、各ページの全文(先頭の空行を除く)を比較してソートします。数値引数を指定すると、降順にソートされます。

M-x sort-fields

領域を行に分割し、各行の1つのフィールドの内容を比較してソートします。フィールドは空白文字で区切られたものと定義されるため、行内で連続する非空白文字の最初のまとまりがフィールド1、2番目のまとまりがフィールド2となります。

数値引数を指定して、ソート対象のフィールドを指定します。1 を指定するとフィールド 1 でソートされ、以下同様です。デフォルトは 1 です。負の引数を指定すると、左からではなく右からフィールドをカウントします。したがって、-1 は最後のフィールドでソートすることを意味します。ソート対象のフィールドの内容が同一である行が複数ある場合、元のバッファにおける相対的な順序が維持されます。

M-x sort-numeric-fields

M-x sort-fieldsと同様ですが、各行で指定されたフィールドが整数に変換され、その数値が比較されます。‘10’は、テキストとして扱う場合は‘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 については、より詳しい説明が必要です。列の一方にドットを、もう一方にマークを置くことで、列を指定します。これにより、ソートしたいテキストの1行目の先頭にドットやマークを置くことができなくなるため、このコマンドでは「領域」に対して特殊な定義を採用しています。すなわち、ドットがある行全体が領域の一部とみなされ、マークがある行全体、およびその間にあるすべての行も同様に領域に含まれます。

例えば、10列目から15列目にある情報でテーブルをソートするには、テーブルの1行目の10列目にマークを付け、最後の行の15列目にポインタを置いてから、sort-columnsを実行します。同様に、1行目の15列目にマークを付け、最後の行の10列目にポインタを置いて実行することもできます。

これは、点とマークで指定された矩形をソートするものと考えることができますが、矩形の左右にある各行のテキストが、矩形内部のテキストとともに移動する点が異なります。Rectanglesを参照してください。

sort-fold-case が nil でない場合、sort コマンドの多くは比較時に大文字小文字を区別しません。