Estoy usando «sort-lines» para ordenar incluir s en archivos C / C ++ antes de guardar. El problema que surge es que los encabezados con "
símbolos se ordenan más alto que los que tienen <
símbolos. Pero quiero lo contrario.
¿Cómo cambio el orden para que el <
personaje tenga mayor prioridad que el "
símbolo?
sort-subr
directamente. O ... como truco, podrías aconsejarsort-lines
que antes del orden intercambies"
y los<
personajes y luego después del tipo los vuelvas a intercambiar. :-)Respuestas:
Puedes usar
sort-regexp-fields
. Marque la región y haga:M-x sort-regexp-fields
RET#include .\(.*\)
RET\1
RETEl grupo de expresiones regulares capturará todo después
#include "
o#include <
y lo ordenará en lugar de la línea completa.Para su información, creo que la razón de la clasificación que está viendo es porque
"
es más alta que<
en ASCII.fuente
<
, los"
símbolos. Pero llegué a la conclusión de que los encabezados ordenados de esta manera se ven un poco desordenados, es por eso que solo quiero cambiar el orden de los personajes.Mientras tanto, escribí un código para implementar el hack que mencionó @glucas. Tal vez solo se adapte al propósito de ordenar encabezados en C, pero espero que alguien lo encuentre útil.
La función
swap-<-and-quote-includes
transforma cada texto como<foo>
a"foo"
, y cada"foo"
a<foo>
dentro del rango dado beg , final .Y aquí está el código para buscar y ordenar encabezados:
La función
c-sort-includes
busca el primer párrafo de «#include» s, y lo ordena. Lo agreguébefore-save-hook
con un código para ejecutarlo solo para los modos C y C ++. Contras conocidas: α) solo se ordenará el primer párrafo con inclusiones. Esto se debe a que la búsqueda hasta el final de un archivo puede ser costosa, por ejemplo, en mi trabajo con el que encontré un.c
archivo recientemente , ¿te lo puedes imaginar? - ≈16000 líneas! La solución correcta sería un modo menor, que rastrearía dónde residen los bloques de encabezado en el archivo. β) En Emacs anteriores, a partir de ≈2015 años, la función podía bloquearse; era un error que luego se solucionó.fuente