Autoformato para Perl en Vim

Autoformato para Perl en Vim

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 ~/.vimrcarchivo 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 perltidyse encuentra en su $PATH; de lo contrario, simplemente especifique la ruta completa al ejecutable.

De forma predeterminada, perltidyformateará 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 ~/.perltidyrcarchivo, 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 onen 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.

información relacionada