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 ~/.vimrc
arquivo 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 perltidy
seja encontrado em seu arquivo $PATH
, caso contrário, basta especificar o caminho completo para o executável.
Por padrão, perltidy
formatará 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 ~/.perltidyrc
arquivo, 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 on
algum 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.