Сортування ліній з наголошеними символами


9

При сортуванні рядків за sort-linesлініями, що починаються з, äнастає після рядків, починаючи з z. Було б непогано, якби рядки можна було сортувати, ігноруючи наголоси, Umlauts тощо, як у словнику. В ідеалі лінія, що починається з, ändernповинна надходити після лінії, що починається з anderen.

Існує просте рішення для пошуку символів з акцентами, згаданих у https://superuser.com/a/675172/, але тут їх не можна використовувати. Мені цікаво, чи можна це рішення адаптувати в цій ситуації.


1
FYI, складання та групування на основі розширених символів було реалізовано в наступній версії emacs isearchта query-replaceв наступній версії.
Користувач Emacs

Відповіді:


5

Для цього я використовую цю функцію

(defun my-sort-lines ()
    (interactive)
    (shell-command-on-region (point-min) (point-max) "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t ))

EDIT: Щоб сортувати область або буфер:

  (defun my-sort-lines-buffer ()
    (interactive)
    (shell-command-on-region (point-min) (point-max) "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t ))
  (defun my-sort-lines-region (start end) 
    (interactive "r") 
    (shell-command-on-region start end "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t))
  (defun my-sort-lines-region-or-buffer ()
    (interactive)
    (save-excursion
      (if (region-active-p)
          (progn
            (my-sort-lines-region (region-beginning) (region-end))
            (message "Sorted selected region"))
        (progn
          (my-sort-lines-buffer)
          (message "Sorted buffer")))))

Дякую, що поділились! Що з перейменуванням my-sort-lines-buffer? Або переписати (defun my-sort-lines (start end) (interactive "r") (shell-command-on-region start end "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t))?
Марко Валь

@Marco Wahl: Я редагую свою публікацію з вашою пропозицією.
djangoliv

Під час цього я отримую помилку "LC_COLLATE" не розпізнається як внутрішня чи зовнішня команда, ні виконувана програма.
Ім'я

@Name Можливо, ви працюєте в Windows. Вибачте, ця функція працює лише на Linux ...
djangoliv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.