Сортировка строк с акцентированными символами


9

При сортировке строк по sort-linesстрокам, начинающимся с, äидет после строк, начинающихся с z. Было бы хорошо, если бы строки могли быть отсортированы без учета акцентов, умлаутов и т. Д., Как в словаре. В идеале строка, начинающаяся с, ändernдолжна идти после строки, начинающейся с anderen.

Существует простое решение для поиска акцентированных символов, упомянутое в https://superuser.com/a/675172/, но его нельзя использовать здесь. Мне интересно, может ли это решение быть адаптировано в этой ситуации.


1
FYI, складывание и группировка на основе расширенных символов реализована в isearchи query-replaceв следующей версии Emacs.
Emacs User

Ответы:


5

Я использую эту функцию для этого

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

РЕДАКТИРОВАТЬ: для сортировки региона или буфера:

  (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: я редактирую свой пост с вашим предложением.
Джанголив

При выполнении этого я получаю сообщение об ошибке «LC_COLLATE» не распознается ни как внутренняя или внешняя команда, ни исполняемая программа.
Имя

@ Имя Возможно, вы находитесь в Windows. Извините, эта функция работает только на Linux ...
Djangoliv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.