Autoformatação para Perl no Vim

Autoformatação para Perl no Vim

Eu tenho um código Perl mal formatado:

if ($a==1){
   &err_report("$a");
while($b!=1){
                      &err_ok();
}
}

Eu queroreformatarisso no Vim. Depois de usar o comando gg=G, o código é formatado como:

if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}

Na verdade, quero formatá-lo no Vim conforme abaixo:

if ($a==1){
  &err_report("$a");
  while($b!=1){
    &err_ok();
  }
}

O que devo fazer?


  • Depois de usarvim-perl, a formatação automática ainda não faz o que desejo.

Responder1

Supondo que você esteja em um sistema operacional semelhante ao Unix...

Segure-seperltidy(um penetrador/formatador de código Perl altamente personalizável). Em seguida, atualize seu ~/.vimrcarquivo para incluir o seguinte:

filetype plugin indent on
autocmd FileType perl setlocal equalprg=perltidy\ -st

Isso permitirá que você marque qualquer bloco de código Perl desejado e reformate-o pressionando =. Isso pressupõe que perltidyseja encontrado em seu arquivo $PATH, caso contrário, basta especificar o caminho completo para o executável.

Por padrão, perltidyformatará seu código como

if ( $a == 1 ) {
    &err_report("$a");
    while ( $b != 1 ) {
        &err_ok();
    }
}

... mas usando -i=2( --indent-columns=2) e -pt=2( --paren-tightness=2) (você colocaria essas opções em seu ~/.perltidyrcarquivo, uma por linha) você obtém

if ($a == 1) {
  &err_report("$a");
  while ($b != 1) {
    &err_ok();
  }
}

Isso é basicamente o que você pediu.

Se você realmente não precisa ter espaço depois while, use -nsak=while( --nospace-after-keyword=while).

Responder2

Primeiro defina as opções de formatação necessárias, por exemplo, set cindent sw=2 expandtab(use recuo tipo C, recue 2 espaços, expanda o caractere de tabulação para espaços). Em seguida, recue todo o arquivo/buffer.

Responder3

O Vim vem com um plugin de indentação Perl e, contanto que você tenha :filetype indent onalgum lugar em sua inicialização (como o vimrc), ele deverá ser capaz de recuar arquivos Perl para você. Mas observe que isso fará apenas recuo, não adicionará ou removerá novas linhas.

informação relacionada