Autoformat für Perl in Vim

Autoformat für Perl in Vim

Ich habe ein Stück schlecht formatierten Perl-Code:

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

Ich möchteNeuformatierunges in Vim. Nach Verwendung des Befehls gg=Gwird der Code wie folgt formatiert:

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

Eigentlich möchte ich es in Vim wie folgt formatieren:

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

Was soll ich machen?


  • Nach dem Gebrauchvim-perl, die automatische Formatierung funktioniert immer noch nicht wie gewünscht.

Antwort1

Vorausgesetzt, Sie verwenden ein Unix-ähnliches Betriebssystem ...

ErgatternAbonnieren(ein hochgradig anpassbarer Perl-Code-Einrücker/Formatierer). Aktualisieren Sie dann Ihre ~/.vimrcDatei, um Folgendes einzuschließen:

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

Damit können Sie jeden beliebigen Perl-Codeblock markieren und ihn dann durch Drücken von neu formatieren =. Dabei wird vorausgesetzt, dass perltidyin Ihrem gefunden wird $PATH, andernfalls geben Sie einfach den vollständigen Pfad zur ausführbaren Datei an.

Standardmäßig perltidywird Ihr Code wie folgt formatiert:

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

... aber durch die Verwendung von -i=2( --indent-columns=2) und -pt=2( --paren-tightness=2) (Sie würden diese Optionen in Ihre ~/.perltidyrcDatei einfügen, eine pro Zeile) erhalten Sie

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

Das ist so ziemlich das, was Sie verlangt haben.

Wenn Sie wirklich nie wieder Leerzeichen nach haben dürfen while, verwenden Sie -nsak=while( --nospace-after-keyword=while).

Antwort2

Legen Sie zunächst die erforderlichen Formatierungsoptionen fest, z. B. set cindent sw=2 expandtab(C-ähnliche Einrückung verwenden, 2 Leerzeichen einrücken, Tabulatorzeichen zu Leerzeichen erweitern). Dann rücken Sie die gesamte Datei/den gesamten Puffer ein.

Antwort3

Vim wird mit einem Perl-Einrückungs-Plugin geliefert und solange Sie es :filetype indent onirgendwo in Ihrem Start (z. B. in Ihrer vimrc) haben, sollte es in der Lage sein, Perl-Dateien für Sie einzurücken. Beachten Sie jedoch, dass es nur Einrückungen vornimmt, aber keine Zeilenumbrüche hinzufügt oder entfernt.

verwandte Informationen