新しい行の関数、条件文、およびループに括弧を書くようにVIMにどのように指示しますか?

新しい行の関数、条件文、およびループに括弧を書くようにVIMにどのように指示しますか?

新しい行にvim形式の括弧を作成する方法はありますか?

たとえば、

public class Foo {
    private Foo(int a) {
        if (a > 30) {
            // do stuff
        }
        for (int i = 0; i < a; i++) {
            // more stuff
        }
    }
}

次のようにする必要があります。

public class Foo
{
    private Foo(int a)
    {
        if (a > 30)
        {
            // do stuff
        }
        for (int i = 0; i < a; i++)
        {
            // more stuff
        }
    }
}

なぜこれですか?zcコードブロックの形式が2番目の例のように指定されている場合、VIMを押すとコードブロックが見やすく折りたたまれます。この場合、VIMは角括弧内のコンテンツのみを縮小します。最初の例のようにコード形式を指定すると、VIMは括弧内の内容だけでなく、、if (...)などfor (....)も折りたたみますfunction f()class Foo()それで、VIMに2番目の例のようにファイルの種類を指定するように指示する方法があるかどうか疑問に思います。

別のオプションは、VIMに角括弧の前にある内容を縮小しないように指示することです。

ベストアンサー1

$はい、これは非常に簡単に実行できます。 line() の末尾の既存の "{" 文字をキャリッジリターン () と新しい "{" に置き換えて、内容\rの形式を適切に指定するには、次の 2 つのコマンドを実行します。極端なケースに対する答えの終わりの編集):

:%s/{$/\r{

:%norm ==

最初のコマンドは次のことを行います。

public class Foo 
{
    private Foo(int a) 
{
        if (a > 30) 
{
            // do stuff
        }
        for (int i = 0; i < a; i++) 
{
            // more stuff
        }
    }
}

2番目のコマンドは次のようになります。

public class Foo 
{
    private Foo(int a) 
    {
        if (a > 30) 
        {
            // do stuff
        }
        for (int i = 0; i < a; i++) 
        {
            // more stuff
        }
    }
}

%上記のコマンドの表記は、ファイル内のすべての行に適用されることを意味します。代わりに、のように範囲を指定したり、などの相対行:5,10s/{$/\r{番号を使用したり、-2,+3s/{$/\r{ビジュアルモードで行を選択してをクリックしたり、: 置換コマンドを使用したりできます。 . この行に適用されます。

(段落を書式 =ap設定するために書式を適用することもできます。詳細については、こちらをご覧ください。)a p:help =

編集する

@blackyellowのコメント:これは良い解決策ですが、1つの問題はすでに正しい形式の行を「}」に置き換えることです。より良いパターンは、:%s/[^( |\t)]}$/\r{「}」の前に2つのスペースまたはタブがある場合、行末を「}」に置き換えないことです。これは正しくインデントできることを示します。

おすすめ記事