Ordenar líneas con caracteres acentuados


9

Al ordenar las líneas por sort-lineslas líneas que comienzan con, äviene después de las líneas que comienzan con z. Sería bueno si las líneas pudieran clasificarse ignorando los acentos, Umlauts, etc., como en un diccionario. Idealmente, una línea que comienza con änderndebería aparecer después de una línea que comienza con anderen.

Hay una solución simple para buscar caracteres acentuados mencionados en https://superuser.com/a/675172/ pero no se puede usar aquí. Me pregunto si esa solución puede adaptarse en esta situación.


1
Para su información, el plegado y la agrupación basados ​​en caracteres extendidos se ha implementado en isearchy query-replaceen la próxima versión de emacs.
Usuario de Emacs

Respuestas:


5

Yo uso esta función para eso

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

EDITAR: para ordenar la región o el búfer:

  (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")))))

¡Gracias por compartir! ¿Qué pasa con el cambio de nombre my-sort-lines-buffer? O reescribir a (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

@Marco Wahl: edito mi publicación con su propuesta.
djangoliv

Al ejecutar esto me sale el error 'LC_COLLATE' no se reconoce como un comando interno o externo ni un programa ejecutable.
Nombre

@Name Quizás estés en Windows. Lo siento, esta función solo funciona en Linux ...
djangoliv
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.