Ordinamento di righe con caratteri accentati


9

Quando si ordinano le linee per sort-linesle linee che iniziano con äviene dopo le linee che iniziano con z. Sarebbe bello se le linee potessero essere ordinate ignorando gli accenti, Umlaut, ecc., Come in un dizionario. Idealmente una linea che inizia con änderndovrebbe essere seguita da una linea che inizia con anderen.

Esiste una soluzione semplice per la ricerca di caratteri accentati menzionata in https://superuser.com/a/675172/ ma non può essere utilizzata qui. Mi chiedo se quella soluzione possa essere adattata in questa situazione.


1
Cordiali saluti, pieghevole e raggruppamento basato su caratteri estesi è stato implementato nella isearche query-replacenella prossima versione di emacs.
Utente Emacs il

Risposte:


5

Uso questa funzione per questo

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

EDIT: per ordinare la regione o il buffer:

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

Grazie per la condivisione! Che ne dici di rinominare my-sort-lines-buffer? O riscrivere 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: modifico il mio post con la tua proposta.
Djangoliv,

Durante l'esecuzione, viene visualizzato l'errore "LC_COLLATE" non riconosciuto come comando interno o esterno né come programma eseguibile.
Nome

@Nome Forse sei su Windows. Spiacente, questa funzione funziona solo su Linux ...
Djangoliv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.