5

ここで少し検索しましたが、誰もこの質問をしていないことに驚いています。Visual Studio 2010 の VB スマート インデントは、複数行のステートメントに対してひどく壊れているのでしょうか? または、何かを間違って実行/設定していますか? キープタブ付きの4文字のインデントに設定しています。VB で自然なリターンを使用して複数行のステートメントを入力すると、次のようになります (無実を保護するためにプロパティ名が変更されています)。

Public Sub Sub1()
    Dim foo As New MyClassA With {.FileName = "test", 
                                  .Format = MyEnumForImageFormat.jpg,
                                            .IsReallySpecial = False,
                                                        .Name = "testN",
                                                                    .SourceId = Guid.NewGuid(),
                                                                    .VariantName = "TestV",
                                                                    .Width = 800,
                                                                    .Height = 600}
End Sub

自分のコードをこのようにフォーマットしたいと思う人がいるでしょうか? おそらく再フォーマットする必要があると思いました(Ctrl + K Ctrl + D):

Public Sub Sub1()
    Dim foo As New ImageBase With {.FileName = "test",
              .Format = MyEnumForImageFormat.jpg,
                 .IsReallySpecial = False,
                    .Name = "testN",
                       .SourceId = Guid.NewGuid(),
                       .VariantName = "TestV",
                       .Width = 800,
                       .Height = 600}
End Sub

一応、再フォーマットしてみました。ほら、それはそれをさらに左に押しました。もう一度押すと、さらに動きました。最後に、4 回の再フォーマットの後、私のコードは次のようになります。

Public Sub Sub1()
    Dim foo As New ImageBase With {.FileName = "test",
     .Format = MyEnumForImageFormat.jpg,
     .IsReallySpecial = False,
     .Name = "testN",
     .SourceId = Guid.NewGuid(),
     .VariantName = "TestV",
     .Width = 800,
     .Height = 600}
End Sub

良いですが、継続する行をスペースだけでインデントしたいですか? また、必要なものを取得するために、4 回再フォーマットする必要があるのはなぜですか? さらに、上記のプロパティ定義をもう 1 つ追加しようとすると、何も整列されません。デフォルトのインデントは、ランダムに決定された数のスペースとタブ文字によって右にオフセットをカスケードすることです。

古いスタイルの継続文字を使用しても役に立ちません。どの程度の正気でもスマートなインデントを行うにはどうすればよいですか?

4

2 に答える 2

6

行を分割する正確な場所に応じて、自動インデントの良し悪しがわかります。あなたの例では、私のスタイルは、左中括弧と最初の項目を次の行に移動することです。その後、インデントはより適切に動作します。

Public Sub Sub1()
    Dim foo As New MyClassA With
        {.FileName = "test",
         .Format = MyEnumForImageFormat.jpg,
         .IsReallySpecial = False,
         .Name = "testN",
         .SourceId = Guid.NewGuid(),
         .VariantName = "TestV",
         .Width = 800,
         .Height = 600}
End Sub

あまり多くのことを想定したくはありませんが、複数行のステートメントの各行のインデントは、前の行によって制御されると思います。ただし、このスタイルの選択では、自然な戻りを使用してアイテムを追加して、アイテム自体を正しく配置することがわかります。スニペットの貼り付けを異なるインデント レベルのターゲットにコピーすると、依然としてインデントの問題が発生しますが、戻り値自体が正しく配置されるため、各行を手動でリセットしてもそれほど問題はありませんでした (Down、End、Delete の繰り返し)。入る。)

同様の解決策は、複数行のラムダ関数で役立ちますが、これらは単純な複数行のステートメントよりも適切に動作します。開始呼び出しを正しく配置すると、ルーチン全体のインデントが自動的に修正されます。

これはあまり良くなく、インデントが浮きます:

Public Sub Sub1()
    Dim a As New Action(Sub()
                            Dim b As Double = 4.0
                            Dim c As Double = 5.0
                            Dim d As Double = b * c
                        End Sub)
End Sub

これは圧子でうまく動作しました:

Public Sub Sub1()
    Dim a As New Action(
        Sub()
            Dim b As Double = 4.0
            Dim c As Double = 5.0
            Dim d As Double = b * c
        End Sub)
End Sub

個人的なスタイルとして、私はこれらを好みますが、他の人は外観が異なっても同じ結果が得られる可能性があります。

于 2012-07-31T21:41:07.687 に答える
1

これも迷惑だと思いました。Vb.Net のプリティ リストをオフにすることは可能です - この質問を見てください: Visual Studio で自動フォーマットをオフにする

私の意見では、それは逆に行き過ぎていますが、あなたが話している問題を止めるはずです.

編集:自動インデント設定をいじってみるのもいいかもしれません。デフォルトは「スマート」に設定されていると思います。

于 2012-07-27T14:14:47.990 に答える