Cuando copio código de otro archivo, el formato está mal, así:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
¿Cómo puedo autoformar este código en vim?
Cuando copio código de otro archivo, el formato está mal, así:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
¿Cómo puedo autoformar este código en vim?
Respuestas:
Pruebe las siguientes teclas:
gg=G
Explicación: gg
va al principio del archivo, =
es un comando para corregir la sangría y G
le dice que realice la operación hasta el final del archivo.
Me gusta usar el programa Artistic Style. Según su sitio web :
Artistic Style es un penetrador, 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 sangría, reemplazando pestañas con espacios o viceversa, colocando espacios alrededor de las operaciones como desee (convirtiendo if(x<2)
a si ( x<2 )
así es como le gusta), colocando llaves en la misma línea que las definiciones de función o moviéndolas a línea debajo, 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 de acuerdo con mis estándares. Si solo necesito reformatear una sola 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 -T4pb
son 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 del estilo:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Después de un estilo (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Espero que ayude.
El complemento vim-autoformat le permite formatear su búfer (o selecciones de búfer) con un solo comando: https://github.com/Chiel92/vim-autoformat . Utiliza programas de formato externo para eso, con un respaldo a la funcionalidad de sangría de vim.
Me parece que clang-format
funciona bien.
Hay algunos ejemplos de combinaciones de teclas en la documentación de clang
Prefiero usar el equalprg
enlace en vim. Esto le permite invocar clang-format
con G=gg
u otras =
opciones de sangría.
Simplemente ponga lo siguiente en su archivo .vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Me gusta indent
como se mencionó anteriormente, pero la mayoría de las veces quiero formatear solo una pequeña sección del archivo en el que estoy trabajando. Como indent
puede tomar código de stdin, es realmente simple:
:!indent
.astyle
también toma stdin, por lo que puedes usar el mismo truco allí.
Quería agregar que, para evitar que se estropee en primer lugar, puede escribir :set paste
antes de pegar. Después de pegar, puede escribir :set nopaste
para que cosas como js-beautify y sangría funcionen nuevamente.
:set paste!
para esto, que alterna el valor de pegar en lugar de configurarlo. Esto hace que sea más fácil apagarlo, ya que puede simplemente retroceder algunos comandos y presionar enter.