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 檔案。但請注意,它只會進行縮進,不會新增或刪除換行符。

相關內容