“Format Code” como no Eclipse

7

No Eclipse, eu posso clicar, CTRL + SHIFT + Fque não apenas corrige o recuo, mas também o espaço em branco (por exemplo: c=a +b ;está corrigido c = a + b;) e o comprimento da linha. Estou procurando uma ferramenta semelhante para o Emacs. Tudo o que sei é C-x h TABque corrige o recuo, mas nada mais. Você conhece alguma maneira automática de formatar completamente um arquivo de origem (espacially C / C ++) no Emacs?

Monkey Supersonic
fonte
Não. No entanto, não deve ser muito difícil escrever uma integração para uma ferramenta externa, como AStyle ou ClangFormat. Aqui está uma pergunta relevante: stackoverflow.com/questions/841075/…
Dmitry
Para recuar, você pode fazê-lo mais rapidamente com o comando prelude-cleanup-buffer-or-region . Copie a definição da função e os modos sensíveis ao recuo do prelúdio no seu init.el. Em seguida, vincule o comando a uma chave como C-c ie use-o sempre que desejar recuar sem o cursor movido para outro lugar.
Tu Do

Respostas:

8

Você pode usar ClangFormat para conseguir isso. Após instalar a clang-formatferramenta, você pode usar clang-format.elpara executar as ações apropriadas do emacs. clang-format.eltambém está disponível no MELPA . Os comandos do emacs fornecidos são clang-format-buffere clang-format-regionvocê pode vincular conforme necessário. Observe que você pode personalizar as opções de formatação usando um .clang-formatarquivo localizado em um diretório ancestral.

Pradhan
fonte
Ah, então a integração já existe. Observe, no entanto, que o MELPA distribui uma versão diferente (aparentemente mais nova) daquela que você vinculou.
Dmitry
O Clang-Format é realmente uma ótima ferramenta, bem integrada ao Emacs. Para ter a mesma ligação que no Eclipse, você pode usar o seguinte em um gancho no modo C / C ++ (define-key c-mode-base-map (kbd "C-S-f") 'clang-format-region). Nas versões recentes clang-formattambém suporta alguns outros idiomas, como Javascript e Java, consulte LanguageKind nesta página: clang.llvm.org/docs/ClangFormatStyleOptions.html
Guillaume Papin
Ok, isso funciona quase bem, tem apenas uma fraqueza: os espaços nos ângulos de fechamento nos argumentos do modelo aninhado são removidos: List<pair<int, int> >->List<pair<int, int>> //Error!
Monkey Supersonic
@ user3000316 Verifique as opções para o valor de configuração "Standard" aqui . Você pode configurá-lo Cpp03para corrigir esse problema.
Pradhan