web-dev-qa-db-ja.com

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 を使用した後でも、自動フォーマットは私が望むことを実行しません。
5
Marslo

Unixライクなオペレーティングシステムを使用していると仮定します...

perltidy (高度にカスタマイズ可能な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ファイルに1行に1つずつ配置します)あなたが得る

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

これはほとんどあなたが求めていたものです。

whileの後に本当にスペースが必要ない場合は、-nsak=while--nospace-after-keyword=while)を使用してください。

4
Kusalananda

VimにはPerlインデントプラグインが付属しており、スタートアップのどこかに:filetype indent onがある限り(vimrcなど)、Perlファイルのインデントを実行できるはずです。ただし、インデントのみを行い、改行を追加または削除しないことに注意してください。

0
Heptite

まず、必要なフォーマットオプションを設定します(例:set cindent sw=2 expandtab(Cのようなインデントを使用し、2つのスペースをインデントし、タブ文字をスペースに展開します)。次に、ファイル/バッファ全体をインデントします。

0
Atafar