Автоформат для 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 автоформатирование все еще не делает то, что я хочу.

3 ответа

Предполагая, что вы работаете в 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).

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

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

Другие вопросы по тегам