Vim 中 Perl 的自动格式化

Mar*_*slo 5 vim perl indentation autoindent

我有一段格式错误的 Perl 代码:

if ($a==1){
   &err_report("$a");
while($b!=1){
                      &err_ok();
}
}
Run Code Online (Sandbox Code Playgroud)

我想在 Vim 中重新格式化它。使用命令后gg=G,代码格式为:

if ($a==1){
&err_report("$a");
while($b!=1){
&err_ok();
}
}
Run Code Online (Sandbox Code Playgroud)

实际上,我想在 Vim 中将其格式化如下:

if ($a==1){
  &err_report("$a");
  while($b!=1){
    &err_ok();
  }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?


  • 使用vim-perl 后,自动格式化仍然没有做我想要的。

Kus*_*nda 5

假设您使用的是类 Unix 操作系统...

获取perltidy(一个高度可定制的 Perl 代码缩进/格式化程序)。然后更新您的~/.vimrc文件以包含以下内容:

filetype plugin indent on
autocmd FileType perl setlocal equalprg=perltidy\ -st
Run Code Online (Sandbox Code Playgroud)

这将允许您标记您想要的任何 Perl 代码块,然后按 重新格式化它=。这假设perltidy在您的 中找到$PATH,否则只需指定可执行文件的完整路径。

默认情况下,perltidy将您的代码格式化为

if ( $a == 1 ) {
    &err_report("$a");
    while ( $b != 1 ) {
        &err_ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

...但是通过使用-i=2( --indent-columns=2) 和-pt=2( --paren-tightness=2) (您可以将这些选项放在您的~/.perltidyrc文件中,每行一个)您会得到

if ($a == 1) {
  &err_report("$a");
  while ($b != 1) {
    &err_ok();
  }
}
Run Code Online (Sandbox Code Playgroud)

这几乎就是你所要求的。

如果您确实必须在 之后没有空格while,请使用-nsak=while( --nospace-after-keyword=while)。


小智 0

首先设置所需的格式选项,例如set cindent sw=2 expandtab(使用类似 C 的缩进、缩进 2 个空格、将制表符扩展为空格)。然后缩进整个文件/缓冲区。