¿Cómo puedo formatear/sangrar automáticamente el código C en vim?

Resuelto Yongwei Xing asked hace 14 años • 10 respuestas

Cuando copio código de otro archivo, el formato es incorrecto, como este:

fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}

¿Cómo puedo formatear automáticamente este código en vim?

Yongwei Xing avatar Mar 01 '10 19:03 Yongwei Xing
Aceptado

Pruebe las siguientes pulsaciones de teclas:

gg=G

Explicación: ggva al principio del archivo, =es un comando para corregir la sangría y Gle indica que realice la operación hasta el final del archivo.

Amir Rachum avatar Mar 01 '2010 12:03 Amir Rachum

Me gusta usar el programa Estilo Artístico. Según su sitio web :

Artistic Style es un indentador, formateador y embellecedor de código fuente para los lenguajes de programación C, C++, C# y Java.

Se ejecuta en Windows, Linux y Mac. Hará cosas como sangrar, reemplazar tabulaciones con espacios o viceversa, colocar espacios alrededor de las operaciones como desee (convirtiendo if(x<2)a si ( x<2 )así es como lo desea), colocar llaves en la misma línea que las definiciones de funciones o moverlas al línea a continuación, etc. Todas las opciones están controladas por parámetros de línea de comando.

Para usarlo en vim, simplemente configure la opción formatprg y luego use el comando gq. Entonces, por ejemplo, tengo en mi .vimrc:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb

de modo que cada vez que abro un archivo .cpp, formatprg se configura con las opciones que me gustan. Luego, puedo escribir gg para ir al principio del archivo y gqGformatear todo el archivo según mis estándares. Si solo necesito reformatear una función, puedo ir a la parte superior de la función, luego escribir gq][y reformateará solo esa función.

Las opciones que tengo para un estilo -T4pbson solo mis preferencias. Puede consultar sus documentos y cambiar las opciones para que formatee el código como desee.

Aquí hay una demostración. Antes de un estilo:

int main(){if(x<2){x=3;}}

float test()
{
if(x<2)
x=3;
}

Después de astyle (gggqG):

int main()
{
    if (x < 2)
    {
        x = 3;
    }
}

float test()
{
    if (x < 2)
        x = 3;
}
Derek avatar Mar 02 '2010 13:03 Derek

Ya se ha mencionado el comando incorporado para sangrar correctamente el código ( gg=G). Si desea embellecer el código, necesitará utilizar una aplicación externa como sangría . Dado que %denota el archivo actual en modo ex, puedes usarlo así:

:!indent %
soulmerge avatar Mar 01 '2010 13:03 soulmerge

Creo que clang-formatfunciona bien.

Hay algunos ejemplos de combinaciones de teclas en la documentación de clang.

Prefiero usar el equalprgenlace en vim. Esto le permite invocar clang-formatcon G=ggu otras =opciones de sangría.

Simplemente coloque lo siguiente en su archivo .vimrc:

autocmd FileType c,cpp setlocal equalprg=clang-format
Daniel avatar Oct 27 '2016 02:10 Daniel