"Formatear código" como en Eclipse

7

En Eclipse, puedo golpear, lo CTRL + SHIFT + Fque no solo corrige la sangría sino también el espacio en blanco (por ejemplo: c=a +b ;se corrige c = a + b;) y la longitud de la línea. Estoy buscando una herramienta similar para Emacs. Todo lo que sé es C-x h TABque corrige la sangría, pero nada más. ¿Conoces alguna forma automática de formatear completamente un archivo fuente (espacialmente C / C ++) en Emacs?

Mono supersónico
fuente
No Sin embargo, no debería ser demasiado difícil escribir una integración para una herramienta externa, como AStyle o ClangFormat. Aquí hay una pregunta relevante: stackoverflow.com/questions/841075/…
Dmitry
Para la sangría, puede hacerlo más rápido con el comando prelude-cleanup-buffer-or-region . Copie la definición de función y los modos sensibles a sangría de preludio en su init.el. Luego, vincula el comando a una tecla como C-c iy úsala siempre que quieras sangrar sin mover el cursor a otra parte.
Tu Do

Respuestas:

8

Puede usar ClangFormat para lograr esto. Después de instalar la clang-formatherramienta, puede usarla clang-format.elpara realizar las acciones apropiadas desde emacs. clang-format.eltambién está disponible de MELPA . Los comandos proporcionados por emacs son clang-format-buffery clang-format-regionque puede vincular según lo necesite. Tenga en cuenta que puede personalizar las opciones de formato utilizando un .clang-formatarchivo ubicado en un directorio ancestro.

Pradhan
fuente
Ah, entonces la integración ya existe. Sin embargo, tenga en cuenta que MELPA distribuye una versión diferente (aparentemente más nueva) a la que se vinculó.
Dmitry
Clang-Format es una gran herramienta, bien integrada en Emacs. Para tener el mismo enlace que en Eclipse, puede usar lo siguiente en su enlace de modo C / C ++ (define-key c-mode-base-map (kbd "C-S-f") 'clang-format-region). En versiones recientes clang-formattambién es compatible con algunos otros idiomas, como Javascript y Java, consulte LanguageKind en esta página: clang.llvm.org/docs/ClangFormatStyleOptions.html
Guillaume Papin
De acuerdo, esto funciona casi bien, solo tiene una debilidad: se eliminan los espacios en los ángulos de cierre en los argumentos de plantilla anidados: List<pair<int, int> >->List<pair<int, int>> //Error!
Monkey Supersonic
@ user3000316 Verifique las opciones para el valor de configuración "Estándar" aquí . Puede configurarlo Cpp03para solucionar este problema.
Pradhan