段落番号で文書の段落をソートする(辞書順ではない)

私は段落が次のような数字で始まる文書を持っています:

101 kjwdujd dkjcjiekrd wekdhehwrd kwedhiehrc wekdhchjedc kjdchhedch .

99 dsjcoiedc wdhiwedc wedhiuwhediuhewdkdeh wedghiuwghediughedc wejgdugwed 

5 kdjewde3 diwedeoi.

私は段落を並べ替えたいので、順序は5、次に99と101にするのが理想的です。しかし、 sort-paragraphs という機能が段落を辞書的にソートするという事実を考えると、 101、次に5、そして9です。

パラグラフを段落番号でソートする方法はありますか?

4

2 答え

sort-paragraphs と同様に、ニーズに合わせて sort-subr PREDICATE 引数を設定します

(defun my-sort-paragraphs (reverse beg end)
  (interactive "P\nr")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (sort-subr reverse
                 (function
                  (lambda ()
                    (while (and (not (eobp)) (looking-at paragraph-separate))
                      (forward-line 1))))
                 'forward-paragraph nil nil
                 (lambda (a b)
                   (< (string-to-number (progn (goto-char (car a))
                                               (current-word)))
                      (string-to-number (progn (goto-char (car b))
                                               (current-word)))))))))
3
追加された
優れたありがとう。
追加された 著者 Name,

短いドキュメントの場合、2つの前提条件を持つ sort-numeric-fields がここで動作します。まず、各段落を1行にする必要があります。 visual-line-mode を使用すると、これはあまり面倒ではありません。次に、すべての空白行を削除する必要があります。これを M-x flush-lines で行い、 ^ \ s * $ と入力します。

この後、 M-x sort-numeric-fields は最初の数字に応じて行を並べ替えます。

明らかに、通常の書式設定された段落の間に空白行を入れてこの作業を行うと、はるかに良いでしょう。私はあなた自身の関数を書かなければそれが利用可能であるかどうかはわかりません。

1
追加された
M-x sort-numeric-fieldsをご利用いただきありがとうございます。これは完全に問題を解決するものではありませんが、それに向けた良いステップです。
追加された 著者 Name,