Vim 中 Perl 的自动格式化

Vim 中 Perl 的自动格式化

我有一段格式错误的 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 操作系统...

联系到珍珠岩(高度可定制的 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 缩进插件,只要:filetype indent on在启动时(例如 vimrc)有该插件,它就可以为你缩进 Perl 文件。但请注意,它只能缩进,不能添加或删除换行符。

相关内容