sólo tenía que resolver este problema exacto, así que pensé que iba a contribuir a salvar a otros algún tiempo.
Puede utilizar gg=G
para sangrar el código. Pero las cosas se vuelven difíciles de entender en el momento en que desea ajustar cómo ocurre el autodentado. Por lo tanto, si sólo se preocupan de que se elimina el espacio en blanco andante y realmente no se preocupan por estilo de formato, gg=G
es la forma más rápida de hacerlo, porque su base.
Si desea controlar el estilo (por ejemplo, intenta hacer que su código se ajuste a a style guide), entonces necesitará una herramienta externa para procesar su archivo. Puede invocar esa herramienta desde vim con: :%!<toolname> <options>
. Esto canaliza el archivo a través de la herramienta y vuelve a cargar el resultado procesado. (Es obvio que se puede utilizar esto para cualquier otra cosa que usted quiere hacer a su archivo también)
Así que la siguiente pregunta es, ¿qué herramienta externa debe elegir? En cualquier caso, el método es el mismo:
- instalar la herramienta de elección
- Asegúrese de que su en su camino
- añadir una línea a su archivo vimrc que crea una clave de acceso directo para utilizar lo que ahorrará tiempo
- Úselo.
Ahora, la herramienta que utiliza depende del estilo que intenta replicar. Si intentas replicar un estilo ampliamente utilizado, entonces lo más probable es astyle es todo lo que necesitas.
Si usted está tratando de reproducir un estilo personalizado, a continuación, se necesitan dos cosas:
- UniversalIndentGui - una interfaz que le permite jugar un poco con varias opciones y vivir-vista previa de su efecto sobre la fuente presentar
- Un conjunto de herramientas de formato de código de código instaladas y en su camino
Entre uncrustify y greatcode, usted debería ser capaz de replicar completamente el estilo que desee.
En realidad, mentí. Hay otra manera y se llama clang-format. Sin embargo, querrá leer la documentación y todavía está en etapas iniciales, por lo que algunas opciones no funcionan muy bien. Sin embargo, es una herramienta hermosa (definitivamente la más inteligente del lote porque construye un AST de su código) e incluso está disponible para Windows.
Si usted va a tomar el tiempo para leer el manual, también desee comprobar hacia fuera GNU Indent.
Por supuesto, no es la última forma, que en realidad está tomando el tiempo para aprender las reglas de sangría de vim y escribir uno para su estilo. Tomará tiempo, pero funcionará con gg=G
.
Algunas notas sobre astyle vs vs Uncrustify GreatCode:
- Astyle es bueno para el formato general, pero no puede hacer cosas como alinear la declaración de variables y comentarios re-estilo muy bien.
- Uncrustify puede hacer MUCHAS cosas que astyle no puede, pero prepárate para pasar una hora jugando hasta que encuentres la combinación correcta de opciones que necesitas. (O si tiene ganas de perder mucho tiempo, use algoritmos genéticos para descubrir la mejor combinación de opciones para su estilo y cuando comparta el código y déme un enlace para que pueda usarlo también :))
Tenga en cuenta que no tiene que elegir una herramienta. Con vim, puede asignar una pulsación de tecla para ejecutar varios comandos en sucesión, por lo que, teóricamente, podría usar una combinación de estas herramientas para obtener exactamente lo que está buscando.
Por último, pero no menos importante, aquí es un extracto de mi archivo .vimrc, donde he mapeado F12 para invocar astyle con algunas opciones:
"A2 = attached brackets
"-s8 indent 8 spaces
"-xc attached braces to class declarations
"-xj remove braces for single statement ifs and elses
"-c convert tabs to spaces in the non-indentation part of the line
map <F12> :%!astyle -A2 -s8 -xc -xj -c<CR>
no me juez en el estilo. Solo usa la herramienta para reproducir lo que quieras.
guau, esto es realmente genial, muchas gracias – flow
¿Es posible asignar esto a una combinación de teclas como ctrl + shift + F? –
También puede anular el operador de sangría de Vim ('=') para usar Astyle estableciendo 'equalprg' en astyle (por ejemplo:' set equalprg = ~/astyle \ --style = google') – Parsa