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( )を使用すると(これらのオプションをファイル内に1行に1つずつ--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 インデント プラグインが付属しており、スタートアップのどこか (vimrc など) にプラグインがあれば、:filetype indent onPerl ファイルのインデントを自動的に行うことができます。ただし、インデントのみが行われ、改行の追加や削除は行われないことに注意してください。

関連情報