Autoformat für Perl in Vim

3187
Marslo

Ich habe einen schlecht formatierten Perl-Code erhalten:

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

Ich möchte es in Vim neu formatieren . Nach der 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 der Verwendung von vim-perl macht das automatische Formatieren immer noch nicht das, was ich will.
5
vim ist im Syntax-Highlight gut, im Autoformat jedoch sehr schlecht. Vielleicht kann jemand etwas Nützliches sagen. Bis dahin +1. peterh vor 10 Jahren 0
@PeterHorvath Vielleicht können sich einige Tools mit vim verbinden und vim mächtig machen ... :) Marslo vor 10 Jahren 0
@ Marslo arbeitet für mich. Haben Sie `filetype plugin indent on` in Ihrem vimrc und setzt` ft '`` return `filetype = perl`? FDinoff vor 10 Jahren 0
Hallo @FDinoff, [das ist mein vimrc] (https://github.com/Marslo/VimConfig/blob/master/Configurations/vimrc), das `filetype plugin indent on` wurde in [Zeile 110] (https: //github.com/Marslo/VimConfig/blob/master/Configurations/vimrc#L110). Haben Sie ein Plugin für die Perl-Syntax hinzugefügt? Marslo vor 10 Jahren 0
Ich kann das Verhalten mit 'vim -u NONE -N a.pl -c' filetype plugin indent auf '-c' filetype detect 'replizieren, was bedeutet, dass es nicht meine vim-Konfiguration ist. Ich laufe vim 7.4.258. FDinoff vor 10 Jahren 1
@FDinoff, oh ja !!! Du hast recht!! Ich denke, das Problem könnte durch die Plugins verursacht werden .... Marslo vor 10 Jahren 0
Nun, ich habe festgestellt, dass "gg = G" auch für "vim -u NONE -N a.pl" funktioniert. Ohne Einstellung für Plugin, Einrückung, Dateityp ... Marslo vor 10 Jahren 0

3 Antworten auf die Frage

4
Kusalananda

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

Holen Sie sich perltidy (ein stark anpassbarer Perl-Codeindenter / -formatierer). Aktualisieren Sie dann Ihre ~/.vimrcDatei, um Folgendes aufzunehmen:

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

Auf diese Weise können Sie den gewünschten Perl-Code-Block markieren und ihn anschließend mit neu formatieren =. Dies setzt voraus, dass perltidyin Ihrem gefunden wird $PATH, andernfalls geben Sie einfach den vollständigen Pfad zur ausführbaren Datei an.

Standardmäßig perltidywird Ihr Code als formatiert

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

... aber durch 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, wonach Sie gefragt haben.

Wenn Sie wirklich keinen Platz haben müssen while, verwenden Sie -nsak=while( --nospace-after-keyword=while).

0
Atafar

set cindent sw=2 expandtabStellen Sie zuerst die erforderlichen Formatierungsoptionen ein, z. B. (C-ähnliche Einrückung verwenden, 2 Leerzeichen einrücken, Tabulatorzeichen um Leerzeichen erweitern). Dann die ganze Datei / den Puffer einrücken.

0
Heptite

Vim wird mit einem Perl-Indent-Plugin :filetype indent ongeliefert. Solange Sie sich in Ihrem Startup befinden (z. B. in Ihrem vimrc), sollte es in der Lage sein, Perl-Dateien für Sie einzurücken. Beachten Sie jedoch, dass es nur Einrückungen ausführt und keine neuen Zeilen hinzufügt oder entfernt.