6

次のようにインデントする必要がある Perl のサブルーチンがあります。

sub GetFiles 
{
    my $pwd = shift;
    my @input = @_;
    my @returned;

    my @DirectoryContent = &GetContentInformation(@input);

    foreach (@DirectoryContent) 
    {
        my %current = %{$_};

        if ($current{'info'} =~ /<DIR>/) 
        {
            my $RecurseDir = &GetRecurseDir($pwd, \%current);
            push(@returned, &GetFiles($RecurseDir, 
                    &GetDirectoryContents($RecurseDir)));
        }
        else 
        { 
            # clean up the data
            my $size = $current{'info'};
            # filesize will be in number of bytes
            # remove file separators
            #$size =~ s/,//g; 
            my $extension = &GetFileExtension($current{'name'});
            delete($current{'info'});
            $current{'size'} = $size;
            $current{'extension'} = $extension;
            # push(@returned, \%current);
        }
     }
     @returned;
}

=%しかし、サブルーチンブロックの開始ブラケットにカーソルを置いて(yes, cindentis on)を押すと、次のようにインデントされます。

sub GetFiles 
{   
    my $pwd = shift;
    my @input = @_;
    my @returned;

    my @DirectoryContent = &GetContentInformation(@input);

    foreach (@DirectoryContent) 
    {
        my %current = %{$_};

        if ($current{'info'} =~ /<DIR>/) 
        {
            my $RecurseDir = &GetRecurseDir($pwd, \%current);
        push(@returned, &GetFiles($RecurseDir, &GetDirectoryContents($RecurseDir)));
    }
    else 
    { 
        # clean up the data
        my $size = $current{'info'};
        # filesize will be in number of bytes
        # remove file separators
        #$size =~ s/,//g; 
        my $extension = &GetFileExtension($current{'name'});
        delete($current{'info'});
        $current{'size'} = $size;
        $current{'extension'} = $extension;
        # push(@returned, \%current);
    }
}
@returned;
}

なぜそれをするのですか?どうすれば修正できますか?

編集: Windowsでgvim 7.3を使用していることに注意してください。

4

4 に答える 4

10

これは魔法のような考えかもしれませんが…

filetype plugin on
filetype indent on 

私の_vimrc(Windows XP 上で、自己コンパイルされたgvim、さまざまなバージョンの) では、Perl、LaTeX、および HTML ファイルであらゆる種類の興味深いインデントの問題が発生します。

今私が持っています

filetype indent on 
filetype plugin on

そして、すべてがハンクドーリーのようです。YMMV。

また、Andy Lester の vim-perlを強くお勧めします。

于 2011-10-26T21:50:19.890 に答える
3

cindent言語に固有のものcであり、他の多くの言語で使用すると壊れます。おそらく使用したいのはfiletype plugin indent on. それをあなたに追加することができ.vimrc、vimはすぐにほとんどの言語の正しい構文/インデントを見つけ出します。vim にまだ構文/インデント ガイドがない場合は、かなり簡単に追加することもできます。

于 2011-10-26T16:39:20.660 に答える
2

filetype indent on私のシステムは、 (対)を使用してコードを正しくインデントします。[ビム7.2]filetypepluginindent on

于 2011-10-26T16:50:09.643 に答える