Автоформат для Perl в Vim

Автоформат для Perl в Vim

У меня есть фрагмент плохо отформатированного кода Perl:

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

Я хочупереформатироватьэто в Vim. После использования команды gg=Gкод форматируется как:

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

На самом деле я хочу отформатировать его в Vim, как показано ниже:

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

Что я должен делать?


  • После использованияvim-perl, автоматическое форматирование все равно не делает то, что мне нужно.

решение1

Предположим, что вы используете Unix-подобную операционную систему...

Получить в рукиperltidy(широко настраиваемый индентор/форматер кода Perl). Затем обновите свой ~/.vimrcфайл, включив в него следующее:

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

Это позволит вам отметить любой блок кода Perl, который вы хотите, а затем переформатировать его, нажав =. Это предполагает, что он perltidyнаходится в вашем $PATH, в противном случае просто укажите полный путь к исполняемому файлу.

По умолчанию perltidyваш код будет отформатирован как

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

... но используя -i=2( --indent-columns=2) и -pt=2( --paren-tightness=2) (вы должны поместить эти параметры в свой ~/.perltidyrcфайл, по одному на строку), вы получите

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

Это практически то, о чем вы просили.

Если вам действительно не нужно оставлять пробел после while, используйте -nsak=while( --nospace-after-keyword=while).

решение2

Сначала установите необходимые параметры форматирования, например set cindent sw=2 expandtab(использовать отступы в стиле C, отступ в 2 пробела, расширить символ табуляции до пробелов). Затем сделайте отступ для всего файла/буфера.

решение3

Vim поставляется с плагином Perl indent, и пока у вас есть :filetype indent onгде-то в вашем автозагрузчике (например, ваш vimrc), он должен быть в состоянии сделать отступы для Perl-файлов. Но учтите, что он будет делать только отступы, он не будет добавлять или удалять новые строки.

Связанный контент