Eu estou usando «linhas de classificação» para classificar incluir s em arquivos C / C ++ antes de salvar. O problema que surge é que cabeçalhos com "
símbolos são classificados mais altos do que aqueles com <
símbolos. Mas eu quero o contrário.
Como altero a ordem para que o <
personagem tenha maior precedência que o "
símbolo?
sort-subr
diretamente. Ou .. como um hack, você pode aconselharsort-lines
para que antes do tipo você troque"
e<
caracteres e depois do tipo que você troque de volta. :-)Respostas:
Você pode usar
sort-regexp-fields
. Marque a região e faça:M-x sort-regexp-fields
RET#include .\(.*\)
RET\1
RETO grupo de expressões regulares capturará tudo depois
#include "
ou#include <
e classificará isso em vez da linha inteira.Para sua informação, acredito que o motivo da classificação que você está vendo é porque
"
é maior do que<
em ASCII.fonte
<
,"
símbolos. Mas cheguei à conclusão de que os cabeçalhos classificados dessa maneira parecem um pouco confusos, é por isso que quero mudar a ordem dos personagens.Enquanto isso, escrevi um código para implementar o hack que o @glucas mencionou. Talvez seja adequado apenas ao propósito de classificar cabeçalhos em C, mas espero que alguém ache útil.
A função
swap-<-and-quote-includes
transforma cada texto como<foo>
para"foo"
, e cada"foo"
para<foo>
dentro do intervalo dado beg , end .E aqui está o código para encontrar e classificar cabeçalhos:
A função
c-sort-includes
procura o primeiro parágrafo de «#include» s e o classifica. Eu o adicionei abefore-save-hook
um código para executá-lo apenas nos modos C e C ++. Contras conhecidas: α) somente o primeiro parágrafo com inclusões será classificado. É porque a pesquisa até o final de um arquivo pode ser cara - por exemplo, no meu trabalho, recentemente encontrei um.c
arquivo - você pode imaginar ?! - 16.000 linhas! A solução correta preferiria ser um modo secundário, que rastrearia onde residem os blocos de cabeçalho no arquivo. β) No Emacs mais antigo, a partir de 2015, a função poderia travar - foi um bug que foi corrigido posteriormente.fonte