Autoformat dla Perla w Vimie

5

Mam fragment źle sformatowanego kodu Perla:

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

chcę przeformatować to w Vimie. Po użyciu polecenia gg=G, kod jest sformatowany jako:

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

Właściwie chcę go sformatować w Vimie jak poniżej:

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

Co powinienem zrobić?


  • Po użyciu vim-perl , automatyczne formatowanie nadal nie robi tego, co chcę.
Marslo
źródło
vim jest dobry w podświetlaniu składni, ale bardzo źle w autoformatowaniu. Może ktoś będzie mógł powiedzieć coś pożytecznego. Do tego czasu +1.
peterh
@PeterHorvath Może niektóre narzędzia mogą połączyć się z vimem i sprawić, że vim będzie potężny ...
Marslo
@Marslo działa dla mnie. Czy masz filetype plugin indent on w twoim vimrc i robi set ft? powrót filetype=perl?
FDinoff
Cześć @FDinoff, To jest mój vimrc , the filetype plugin indent on został ustawiony na linia 110 . Czy dodałeś wtyczkę do składni Perla?
Marslo
1
@Marslo No. Mogę powtórzyć zachowanie za pomocą vim -u NONE -N a.pl -c 'filetype plugin indent on' -c 'filetype detect' co oznacza, że ​​nie jest to moja konfiguracja vima. Używam vim 7.4.258.
FDinoff

Odpowiedzi:

4

Zakładając, że jesteś na systemie operacyjnym podobnym do Uniksa ...

Złapać perltidy (wysoce dostosowywalny wgłębnik / formater kodu Perla). Następnie zaktualizuj swój ~/.vimrc plik zawierający następujące elementy:

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

Pozwoli to zaznaczyć dowolny blok kodu Perla, a następnie sformatować go, naciskając = . To zakłada, że perltidy znajduje się w twoim $PATH, w przeciwnym razie podaj pełną ścieżkę do pliku wykonywalnego.

Domyślnie, perltidy sformatuje Twój kod jako

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

... ale używając -i=2 ( --indent-columns=2 ) i -pt=2 ( --paren-tightness=2 ) (umieściłbyś te opcje w swoim ~/.perltidyrc plik, po jednym w linii)

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

To jest dokładnie to, o co prosiłeś.

Jeśli naprawdę nie musisz mieć miejsca po while, zawsze używaj -nsak=while ( --nospace-after-keyword=while ).

Kusalananda
źródło
0

Najpierw ustaw wymagane opcje formatowania, np. set cindent sw=2 expandtab (użyj wcięcia typu C, wcięcie 2 spacji, rozwinięcie znaku tabulacji do spacji). Następnie wcnij cały plik / bufor.

Atafar
źródło
0

Vim zawiera wtyczkę do wcięcia Perla i tak długo, jak masz :filetype indent on gdzieś w twoim starcie (takim jak vimrc) powinno być możliwe wykonanie wcięć dla plików Perla. Ale zauważ, że będzie to tylko wcięcie, nie doda ani nie usunie znaków nowej linii.

Heptite
źródło