Tengo un fragmento de código Perl mal formateado:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
Yo quieroreformatearen Vim. Después de usar el comando gg=G
, el código tiene el formato:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
En realidad, quiero formatearlo en Vim como se muestra a continuación:
if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
¿Qué tengo que hacer?
- Después de usarvim-perl, el formato automático todavía no hace lo que quiero.
Respuesta1
Suponiendo que estás en un sistema operativo tipo Unix...
Apoderarse deperversión(un indentador/formateador de código Perl altamente personalizable). Luego actualice su ~/.vimrc
archivo para incluir lo siguiente:
filetype plugin indent on
autocmd FileType perl setlocal equalprg=perltidy\ -st
Esto le permitirá marcar cualquier bloque de código Perl que desee y luego reformatearlo presionando =. Esto supone que perltidy
se encuentra en su $PATH
; de lo contrario, simplemente especifique la ruta completa al ejecutable.
De forma predeterminada, perltidy
formateará su código como
if ( $a == 1 ) {
&err_report("$a");
while ( $b != 1 ) {
&err_ok();
}
}
... pero al usar -i=2
( --indent-columns=2
) y -pt=2
( --paren-tightness=2
) (pondrías estas opciones en tu ~/.perltidyrc
archivo, una por línea) obtienes
if ($a == 1) {
&err_report("$a");
while ($b != 1) {
&err_ok();
}
}
Esto es más o menos lo que pediste.
Si realmente no debe tener espacio después de while
, utilice -nsak=while
( --nospace-after-keyword=while
).
Respuesta2
Primero configure las opciones de formato requeridas, por ejemplo, set cindent sw=2 expandtab
(use sangría tipo C, sangría de 2 espacios, expandir el carácter de tabulación a espacios). Luego sangra todo el archivo/búfer.
Respuesta3
Vim viene con un complemento de sangría de Perl, y siempre que lo tenga :filetype indent on
en algún lugar de su inicio (como su vimrc), debería poder sangrar los archivos de Perl por usted. Pero tenga en cuenta que solo aplicará sangría, no agregará ni eliminará nuevas líneas.